【发布时间】:2021-04-05 18:32:29
【问题描述】:
我有 2 个代表 CSV 文件的数据框:
# 1.csv
id,email
1,someone@email.com
2,someoneelse@email.com
...
# 2.csv
id,email
3,someone@otheremail.com
4,someone@email.com
...
我想要做的是使用Pandas 将两个表合并到一个DataFrame 中,这取决于特定列(在本例中为第2 列,email)在两个DataFrames 中是否相同。
我需要合并的 DataFrame 从2.csv 中选择id。
例如,使用上面的示例数据,由于email列值someone@email.com在两个CSV中都存在,我需要合并的DataFrame输出以下内容:
# 3.csv
id,email
4,someone@gmail.com
2,someoneelse@email.com
3,someone@otheremail.com
我目前的情况如下:
df1 = pd.read_csv('/path/to/1.csv')
print("df1 has {} rows".format(len(df1.index)))
# "df1 has 14072 rows"
df2 = pd.read_csv('/path/to/2.csv')
print("df2 has {} rows".format(len(df2.index)))
# "df2 has 56766 rows"
join = pd.merge(df1, df2, on="email", how="inner")
print("join has {} rows".format(len(join.index)))
# "join has 321 rows"
问题在于join DataFrame 仅生成两个 DataFrame 中存在email 字段的行。我期望的是输出 DataFrame 包含 56766 + 14072 - 321 = 70517 行,其中 id 值是来自 2.csv 的值,而 email 字段在两个源 DataFrames 中是相同的。我尝试更改merge(how="left|right"),但结果相同。
【问题讨论】:
-
使用
how='outer'。 -
还是和
how='outer'一样...
标签: python pandas dataframe csv