我有幾個資料框,我希望它們的所有列都為大寫。我這樣做如下:
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())
但不知何故這不起作用(但沒有顯示錯誤),列保持小寫。我還嘗試在最后附加一個“回傳 x”,但這也不起作用。有人能幫我嗎?
uj5u.com熱心網友回復:
對資料框的更改未反映在原始變數中。df1、df2、 和df3。
您可以使用該globals()功能來實作這一點。代碼如下:
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 是代碼中的關鍵字,您應該將變數名稱更改為其他名稱。
uj5u.com熱心網友回復:
好的,如果我添加了global宣告,pri 的回答對我有用。
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())
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/364798.html
上一篇:本地Spark配置
