簡體   English   中英

如何將多個原始輸入 CSV 與包含名稱略有不同的相似列的 pandas 合並?

[英]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 名稱映射到正確的名稱

如果所有文件中的列順序相同,您可以嘗試這樣,

  1. 首先預定義列
  2. 首先更改所有文件的列名並連接數據框
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.

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