pd.merge 通过文件执行时引发.bat错误



Python 脚本在 bat 文件中执行时不会运行,而是在编辑器上无缝运行。

该错误与 pd.merge 脚本中的数据类型差异有关。尽管为两列提供的数据类型在两个数据帧中相同。

df2a["supply"] = df2a["supply"].astype(str)
df2["supply_typ"] = df2["supply_typ"].astype(str)
df2a["supply_typ"] = df2a["supply_typ"].astype(str)
df = (pd.merge(df2,df2a, how=join,on= 
['entity_id','pare','grome','buame','tame','prd','gsn',                                                    
'supply','supply_typ'],suffixes=['gs2','gs2x']))

运行 bat 文件时,我在 pd.merge 中收到以下错误:

您正在尝试合并 float64 和对象列。如果你想继续,你应该使用pd.concat

不是直接答案,但包含无法在注释中格式化的代码,应该足以解决问题。

当熊猫说你试图在 float64 和对象列上合并时,这当然是对的。这可能并不明显,因为 pandas 依赖于 numpy,并且 numpy 对象列可以存储任何数据。

最后,我用一个简单的函数来诊断所有这些数据类型问题:

def show_types(df):
    for i,c in enumerate(df.columns):
        print(df[c].dtype, type(df.iat[0, i]))

它显示数据帧列的 pandas 数据类型,以及列的第一个元素的实际类型。它可以帮助查看包含str元素的列与其他包含datatime.datatime元素的列之间的差异,而数据类型只是objects

在两个数据帧上使用它,问题应该变得很明显......

最新更新