我正在接收檔案,并且對于某些檔案,列的名稱不同。例如:
- 在檔案 1 中,列名是:“studentID”、“ADDRESS”、“Phone_number”。
- 在檔案 2 中,列名稱為:“Common_ID”、“Common_Address”、“Mobile_number”。
- 在檔案 3 中,列名是:“S_StudentID”、“S_ADDRESS”、“HOME_MOBILE”。
我想在將檔案資料加載到資料框后傳遞一個字典,并且在該字典中我想傳遞如下值:
StudentId -> STUDENT_ID
Common_ID -> STUDENT_ID
S_StudentID -> STUDENT_ID
ADDRESS -> S_ADDRESS
Common_Address -> S_ADDRESS
S_ADDRESS -> S_ADDRESS
這樣做的原因是因為在我的下一個資料幀中,我正在讀取諸如“STUDENT_ID”、“S_ADDRESS”之類的列名,如果它在資料幀中找不到“S_ADDRESS”、“STUDENT_ID”名稱,它將為名稱為的檔案拋出錯誤不規范。我想在上述 DF 中重命名后運行我的資料框并從這些檔案中獲取值,并且在運行新 df 時的一個問題是它會選擇其中包含資料的列名表單字典。
uj5u.com熱心網友回復:
您可以根據需要使用字典并toDF與串列理解一起使用以重命名列。
輸入資料框和列名:
from pyspark.sql import functions as F
df = spark.createDataFrame([], 'Common_ID string, ADDRESS string, COL3 string')
print(df.columns)
# ['Common_ID', 'ADDRESS', 'COL3']
字典和toDF:
dict_cols = {
'StudentId': 'STUDENT_ID',
'Common_ID': 'STUDENT_ID',
'S_StudentID': 'STUDENT_ID',
'ADDRESS': 'S_ADDRESS',
'Common_Address': 'S_ADDRESS',
'S_ADDRESS': 'S_ADDRESS'
}
df = df.toDF(*[dict_cols.get(c, c) for c in df.columns])
結果列名稱:
print(df.columns)
# ['STUDENT_ID', 'S_ADDRESS', 'COL3']
uj5u.com熱心網友回復:
使用 dict 和串列理解。一種更簡單的方法,即使某些列不在串列中也可以使用
df.toDF(*[dict_cols[x] if x in dict_cols else x for x in df.columns ]).show()
---------- --------- ----
|STUDENT_ID|S_ADDRESS|COL3|
---------- --------- ----
---------- --------- ----
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/526504.html
上一篇:資料框:要比較的索引值
下一篇:分析和過濾資料框中的調查回應
