簡體   English   中英

PySpark:迭代數據幀列表

[英]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 的更改未反映在原始變量中,即。 df1df2df3

您可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM