[英]How to merge multiple raw input CSV's with pandas containing similar columns with slightly different names?
我編寫了一些代碼來組合使用 Pandas 解釋並附加到一個組合 CSV 的多個 CSV。
我遇到的問題是 CSV 文件由多方(每月)交付,並且通常包含有關列名的差異,而它們本質上包含相同的信息。 例如:
CSV 1 | 身份證 | 實例編號 | | -------- | -------------- | | 1 | 401421 | | 2 | 420138 |
CSV 2 | 身份證 | 實例編號 | | -------- | -------------- | | 1 | 482012 | | 2 | 465921 |
這將導致組合文件中有兩列,Instance Number & Instance NO,除非我事先重命名該列,而想法是自動處理所有文件而無需事先干預。
應該工作的解決方案是使用combine_first 或fillna,但下一次可以輸入列,例如實例編號/編號。
由於改進數據交付不是一種選擇,有沒有什么聰明的方法可以解決這樣的問題,而不必寫出所有可能的變化並將它們重新映射到一個前導列?
提前致謝!
我認為首先您需要有一個包含所有可能名稱的字典,或者您可以在獲得新名稱時快速添加這些名稱並重命名列名。 例如
general_dict = { 'SLNO': ['Sl No', 'SNo']}
col_list = all_df.columns.to_list()
rename_dict = {}
for col in col_list:
for key, val in general_dict.items():
if col in val:
rename_dict[col] = key
break
all_df.rename(columns=rename_dict, inplace=True)
簡短的回答是否定的,因為您要求計算機自己思考。 但是,您確實有多種選擇來處理常見情況。
如果列順序和/或位置是固定的,您可以使用header=0, names=['ID', 'Instance']
忽略文件中發送的標題並使用已知數據
您還可以生成一個配置文件,將所有可能的錯誤 header 名稱映射到正確的名稱
如果所有文件中的列順序相同,您可以嘗試這樣,
data1 = pd.read_csv('data/data1.csv')
data2 = pd.read_csv('data/data2.csv')
data1.columns = ['A', 'B', 'C']
data2.columns = ['A', 'B', 'C']
pd.concat([data1, data2], axis=0)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.