[英]PySpark: Iterate over list of dataframes
我有幾個 dataframe 並且我希望它們的所有列都是大寫的。 我這樣做如下:
for col in df1.columns:
df1 = df1.withColumnRenamed(col, col.upper())
for col in df2.columns:
df2 = df2.withColumnRenamed(col, col.upper())
不,我想在這樣的數組迭代中執行此操作:
list = (df1, df2, df3)
for x in list:
for col in x.columns:
x = x.withColumnRenamed(col, col.upper())
但不知何故這不起作用(但沒有顯示錯誤),列保持小寫。 我還嘗試在最后附加一個“return x”,但這也不起作用。 有人能幫我嗎?
dataframe 的更改未反映在原始變量中,即。 df1
、 df2
和df3
。
您可以使用globals()
function 來實現這一點。 下面的代碼:
a = ['df1', 'df2', 'df3']
for x in a:
for col in globals()[x].columns:
globals()[x] = globals()[x].withColumnRenamed(col, col.upper())
根據您的用例,您可能必須使用globals()
或locals()
。
globals()
和locals()
都有助於通過字符串訪問變量,並且它們都返回變量字典。 您可以在線閱讀有關它們的更多信息。
編輯:另外, list 是代碼中的關鍵字,您應該將變量名稱更改為其他名稱。
好的 pri 的答案對我有用,如果我添加了一個global
語句。
global df1, df2, df3
a = ['df1', 'df2', 'df3']
for x in a:
for col in globals()[x].columns:
globals()[x] = globals()[x].withColumnRenamed(col, col.upper())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.