pandas - 将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)
解决方案
这是一个用户(我猜是亨利埃克)的解决方案,他删除了他的帖子。对不起我的业余爱好,非常感谢你。
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()
推荐阅读
- swift - Disable iOS keyboard from displaying
- r - R - filling a cell with the value from the previous column
- clockify - Clockify 集成(提取给定时间段的时间条目)
- biopython - biopython (python3) phylo,距离函数是如何工作的?
- google-bigquery - Google BigQuery 速率限制 Tableau
- python - Python recursive function reloaded from module
- python - Can't use any filetype I try with Tkinter filedialog "filetype"
- javascript - 尝试动态地将图像添加到轮播中不起作用
- javascript - 检查嵌套组件中是否选中了任何复选框
- memory-management - C++ 17 中的 std::aligned_alloc 和对齐运算符 new