Python ValueError 如果 运行 在不同的笔记本电脑上

Python ValueError if running on different laptop

我刚刚构建了一个在我的笔记本电脑上运行良好的功能(Mac,但我正在办公室笔记本电脑的 Windows 虚拟机上工作),但是当我通过它给我的同事,它引发了 ValueError:

"You are trying to merge on object and int64 columns. If you wish to proceed you should use pd.concat"

引发错误的代码行是一个简单的合并,在我的笔记本电脑上完美运行:

df = pd.merge(df1, df2, on = "x", how = "outer)

输入文件完全相同(直接从同一个远程文件夹中获取)。 我完全不知道如何解决这个问题,我不明白为什么在我的笔记本电脑上它可以工作(即使我打开一个新脚本或者我重新启动内核,所以周围没有存储的变量)和我的一个同事不是。

感谢您的帮助!

其中一列是对象数据类型,另一列是整数。它们需要具有相同的格式才能合并。尝试添加两行以更改同事计算机上的数据类型。

df2['x'] = df2['x'].astype(str)
df1['x'] = df1['x'].astype(str)
df = pd.merge(df1, df2, on = "x", how = "outer)

行为可能因 pandas 的不同版本而有所不同;或者,excel 文件中可能存在细微差别,您同事计算机上的 excel 文件中的其中一列以不同的格式保存。

我的猜测(一个大胆的猜测)是来自 2 个制表符分隔的 CSV 文件(即 TSV 文件)的数据以某种方式在您的计算机和您同事的计算机上使用不同的语言环境进行了转换。

检查您是否有与区域设置相关的操作,这些操作可能导致带有 "wrong" 小数点分隔符的数字不被识别为数字。

这不应发生在 pd.read_csv() 中,因为 decimal 参数具有明确定义的默认值 "."

但是根据我在另一个上下文中使用时间戳的经验,一个 "bad" 格式的时间戳可能会导致整个列的类型错误。因此,如果只有两个文件之一的一个数字,在您要合并的列中,有一个小数点分隔符,并且这个小数点分隔符只能在您的机器上被识别,只有在您的机器上连接才会成功(我' m 假设 pandas 可以连接数字列,即使它们属于不同类型)。