簡體   English   中英

將多個CSV合並到一個以文件名作為列名的DataFrame中

[英]Merge multiple CSV into one DataFrame with filename as column name

我想合並一個目錄中的許多txt文件。以下是名為df_A,df_B和df_c的三個文件的示例:

df_A
       0  1    2
0  James  1  yes
1   Jake  3   No
2   Jane  2  Yes

df_B
       0  1    2
0   Jane  2   No
1    Job  6   No
2  James  1  Yes

df_C
       0  1    2
0   Jack  4   No
1  Jenny  7  Yes
2  James  1   No
3   John  9  Yes

我希望最終的數據幀看起來像這樣:

ID  Name    df_A    df_B    df_C

1   James   Yes     Yes     No
3   Jake    No      NA      NA
2   Jane    Yes     No      NA
6   Job     NA      Yes     NA
4   Jack    NA      NA      No
7   Jenny   NA      NA      Yes
9   John    NA      NA      Yes

這是我到目前為止的代碼...

new_df = pd.DataFrame(columns = ['Name', 'ID'])

for filename in os.listdir('/path'):
    if filename.endswith('.txt'):
        course = os.path.splitext(filename)[0]

        new_df = pd.concat([combined_df,pd.DataFrame(columns=[course])])
        data = pd.read_csv(filename, sep="\t", header=None)

        for i in data[data.columns[1]]:
            if i not in new_df['ID']:
                new_df['ID'].append(i)

對於這三個數據框,只需分配列名。 最后一列應該是唯一的。 然后,調用pd.concat + groupby作為輸出。

dfA.columns = ['Name', 'ID', 'df_A']
dfB.columns = ['Name', 'ID', 'df_B']
dfC.columns = ['Name', 'ID', 'df_C']

pd.concat([dfA, dfB, df3])\
      .groupby('Name', as_index=False, sort=False).first()\
      .set_index('ID').fillna('')

     Name df_A df_B df_C
ID                      
1   James  yes  Yes   No
3    Jake   No          
2    Jane  Yes   No     
6     Job        No     
4    Jack             No
7   Jenny            Yes
9    John            Yes

通常,假設您有df_list 然后,您可以在循環中分配列名稱。

df_list = [dfA, dfB, dfC, ...]
for i, df in enumerate(df_list):
    df.columns = ['Name', 'ID', 'df_{}'.format(chr(ord('A') + i))]

pd.concat(df_list).groupby('Name', 
        as_index=False, sort=False).first().set_index('ID')
import os
import pandas as pd

combinedDF = pd.DataFrame(columns=['Name','ID'])

for filename in os.listdir(os.getcwd()):
    if filename.endswith('.txt'):
        df = pd.read_csv(filename, header=None, delimiter=' ')
        df.columns=['Name','ID',filename[:-4]]
        combinedDF = combinedDF.merge(df, on=['Name', 'ID'], how='outer')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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