首页 > 解决方案 > 将csv文件导入pandas并合并为一个df(列中的级别数不相等)

问题描述

我可以手动合并两个数据框,但我不知道如何自动化这个过程。

在此处输入图像描述

这种合并可以按如下方式完成:

new_df = df1.assign(index_count=df1.groupby('Step_ID').cumcount())\
            .merge(df2.assign(index_count=df2.groupby('Step_ID').cumcount()),
                   on=['Step_ID', 'index_count'], how='outer')\
            .sort_values(['Step_ID', 'index_count'])\
            .drop('index_count', axis=1)

print(new_df)

它手动工作得很好,但我想读取文件夹中的所有 csv 文件并自动合并它们(使用上面的代码)。

为了附加所有 CSV,我尝试了以下方法:


这里是两个csv文件的上传:https ://github.com/pit9921/test

如果上传文件的 read_csv 不起作用,这里是两个 df,可以本地存储:

import pandas as pd  
 
data = {'Step_ID': ["Step1", "Step1", "Step1", "Step2", "Step2", "Step3", "Step3"],    
        'value_01': [2, 2.3, 2.2, 0, 0, 5, 5.2]}  
df1 = pd.DataFrame(data) 
df1.to_csv('df1.csv', index=False)

data = {'Step_ID': ["Step1", "Step1", "Step1", "Step1", "Step2", "Step2", "Step2", "Step3", "Step3", "Step3"],    
        'value_02': [2.3, 2.5, 2.1, 2.5, 0, 0, 0, 5.1, 5.6, 5.8]}  
df2 = pd.DataFrame(data) 
df2.to_csv('df2.csv', index=False)

标签: pandasmergeassign

解决方案


这是一个用户(我猜是亨利埃克)的解决方案,他删除了他的帖子。对不起我的业余爱好,非常感谢你。

import pandas as pd
import glob

path = r'C:\Users\xxx' 
all_files = glob.glob(path + "/*.csv")

dfs = []
for filename in all_files:
    df = pd.read_csv(filename, index_col=None, header=0)
    dfs.append(df.set_index(['Step_ID', df.groupby('Step_ID').cumcount()]))

merged = pd.concat(dfs, axis=1).droplevel(1).reset_index()

推荐阅读