【问题标题】:Merging two pandas dataframes合并两个熊猫数据框
【发布时间】:2017-06-11 05:31:43
【问题描述】:

我已经多次看到这个问题,但答案对我不起作用。我有两个数据框,split_dfcsv_df,我试图将它们合并到一个名为 key 的列上。

这是来自split_df的前5个项目

        key        tags
2785  30000        ipv6
2785  30000  networking
2785  30000    wireless
2785  30000   standards
2785  30000      satcom

这是来自csv_df 的前 5 个项目

     key
0  30000
1  30002
2  31288
3  33630
4  31663

当我运行这个合并语句时:

common_df = pd.merge(split_df,csv_df, on=['key'], suffixes=('_left', '_right'))

我明白了:

Empty DataFrame
Columns: [key, tags]
Index: []

进程以退出代码 0 结束

我无法弄清楚为什么合并对我不起作用。有什么建议吗?

我在两者上都有索引(并且已经将它们与它们合并)

csv_df.set_index('key')
split_df.set_index('key')

我对 Pyton 和 Pandas 很陌生

谢谢!

【问题讨论】:

    标签: python pandas join dataframe merge


    【解决方案1】:

    从上面的代码这对我有用:

    In [11]: pd.merge(split_df,csv_df, on=['key'], suffixes=('_left', '_right'))
    Out[11]:
         key        tags
    0  30000        ipv6
    1  30000  networking
    2  30000    wireless
    3  30000   standards
    4  30000      satcom
    

    我怀疑您的数据框中的列类型 key 不同(而我的 int 相同)。

    其中一个很可能是字符串(另一个是浮点数/整数)。

    In [12]: split_df["key"] = split_df["key"].apply(str)
    
    In [13]: pd.merge(split_df,csv_df, on=['key'], suffixes=('_left', '_right'))
    Out[13]:
    Empty DataFrame
    Columns: [key, tags]
    Index: []
    

    如果它们都是字符串:

    In [14]: csv_df["key"] = csv_df["key"].apply(str)
    
    In [15]: pd.merge(split_df,csv_df, on=['key'], suffixes=('_left', '_right'))
    Out[15]:
         key        tags
    0  30000        ipv6
    1  30000  networking
    2  30000    wireless
    3  30000   standards
    4  30000      satcom
    

    【讨论】:

    • 检查splitt_df.dtypescsv_df.dtypes
    【解决方案2】:

    您的一个数据框中的key 列是int,而另一个是str

    split_df.key = split_df.key.astype(int)
    csv_df.key = csv_df.key.astype(int)
    
    pd.merge(split_df,csv_df, on=['key'], suffixes=('_left', '_right'))
    

    【讨论】:

    • 谢谢你-就是这样:-)
    猜你喜欢
    • 2016-01-01
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    相关资源
    最近更新 更多