python - Pandas 基于列合并 csv

标签 python csv pandas merge

您好,我知道之前已经回答过这个问题,但我在这些解决方案中得到的结果很奇怪。因此,希望能解释一下我的方法有什么问题。

我有 2 个 csv 文件

f1

A,B,C
1,2,3
1,2,3
3,3,3

f2

C,D,F
3,3,1
1,1,1

我正在尝试合并它们。 简单

f = pd.merge(left=f1, right=f2, how='outer', on='C')

但是合并结果不是给出预期的表

A,B,C,D,F
1,2,3,3,1
1,2,3,3,1
3,3,3,3,1

我得到的结果是:

A,B,C,D,F
1,2,3
1,2,3
3,3,3
,,3,3,1
,,1,1,1

不知道为什么我会收到这个。

我不是在处理这些确切的数据。我从 csv 文件中读取这些数据作为

pd.read_csv('filename.csv', usecols=[colnames])

编辑:

这是我的代码:

import pandas as pd
f2 = pd.read_csv('filename1.csv', usecols=[colnames])
f1 = pd.read_csv('filename2.csv', usecols=[colnames])
f = pd.merge(left=f1, right=f2, how='left', on='MergeCol')

最佳答案

这是您的解决方案。你想做一个左连接而不是外部连接:

import pandas as pd
f1 = pd.DataFrame({'A':[1,1,3], 'B':[2,2,3], 'C':[3,3,3]})
f2 = pd.DataFrame({'C':[3,1], 'D':[3,1], 'F':[1,1]})
f = f1.merge(f2, how='left', on='C')

输出:

   A  B  C  D  F
0  1  2  3  3  1
1  1  2  3  3  1
2  3  3  3  3  1

如果您想写回 csv,只需执行以下操作:

f.to_csv('yourfile.csv', index=False)

关于python - Pandas 基于列合并 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42583664/

相关文章:

python - pandas.DataFrame 将所有字符串值设置为 nan

regex - 列表中的 Pandas Dataframe 通配符值

python - 使用 Python 从文本文件中提取数字数据

JSON 反序列化仅在实时构建中抛出循环引用

python - 在同一时间戳下对 csv 数据进行分组

linux - 如何在 Linux 上查找目录中的 csv 文件的总行数?

python - 仅在堆叠条形顶部添加总值

python - 如何测量 Celery 任务持续时间

python - 如何根据两列的值删除重复行?

python - 从基于 django 类的 View 重定向到外部页面