【问题标题】:Is there a way to know which columns have different datatypes to be able to merge? Python - Pandas有没有办法知道哪些列有不同的数据类型可以合并? Python - 熊猫
【发布时间】:2021-06-17 17:14:50
【问题描述】:

所以我有 2 个相当大的 df,我得到了一些 ValueErrors。

ValueError:您正在尝试合并 object 和 int64 列。如果你想继续,你应该使用 pd.concat

我一一检查了它们(30 列,oof)并最终解决了问题,但如果有任何代码可以为我提供阻止合并的特定列...它可以对我来说非常有用,因为我正在处理其他人的数据框,这样的事情一直在发生。

例子:

df1 (4.000.000,30) df2 (2.000,120)


Join= pd.merge(df1,df2,how='left',on['Name_of_Column1','Name_of_Column2','Name_of_Column3','Name_of_Column4'])

ValueError:您正在尝试合并 object 和 int64 列。如果你想继续,你应该使用 pd.concat

它们只有一些共同的列,我可以通过某种方式比较 dfs 的 dtype 以了解哪些列具有不同的 dtype?

提前致谢!

【问题讨论】:

  • 尚不完全清楚您在寻找什么,但df.dtypes 似乎是一个不错的起点。如果您edit 包含minimal reproducible example,我们或许能够提供更具体的帮助
  • 您需要提供一些示例数据才能获得查询的答案。
  • 我试着让它更清楚一点。我将 df.dtype 复制到一个 excel 中并弄清楚了,但是有没有办法在 python 中比较它们?

标签: python pandas merge valueerror


【解决方案1】:

假设您有 2 个具有相似列名的数据框,并且只想知道哪些列在两个数据框中没有相同的 dtype,以便您和平地进行合并,您可以尝试以下操作:

df1 = pd.DataFrame([[1,2,'3',4],
                   [1,2,'3',4],
                   [1,2,'3',4]], columns=['a','b','c','d'])

df2 = pd.DataFrame([[5,5,'5','5'],
                   [5,5,'5','5'],
                   [5,5,'5','5']], columns=['a','b','c','d'])

获取'd' 列与dtype 不匹配的这两个数据帧

def dtype_checker(df1, df2):
    df1_types = dict(df1.dtypes)
    df2_types = dict(df2.dtypes)
    for col_name in df1.columns:
        assert df1_types[col_name] == df2_types[col_name], 'dtype mismatch in '+col_name+' column'

dtype_checker(df1, df2)

这将导致输出:

AssertionError: dtype mismatch in d column

【讨论】:

  • 谢谢!这正是我想要的
猜你喜欢
  • 2019-06-29
  • 2017-08-28
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 2010-11-10
  • 2011-10-27
  • 1970-01-01
相关资源
最近更新 更多