如果在其他笔记本电脑上运行,则发生Python ValueError

时间:2020-05-28 11:22:01

标签: python pandas merge valueerror

我刚刚构建了一个可以在笔记本电脑上正常工作的功能(Mac,但是我正在使用办公室笔记本电脑的Windows虚拟机),但是当我将其传递给同事o'mine时,它会引发ValueError:

“您正在尝试合并object和int64列。如果要继续,则应使用pd.concat。”

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

df = pd.merge(df1,df2,on =“ x”,how =“外)

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

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

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

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

由于熊猫的版本不同,行为可能有所不同。或者,可能是excel文件中有细微差别,其中同事计算机上的excel文件具有以不同格式保存的列之一。

答案 1 :(得分:0)

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

检查您是否具有与语言环境相关的操作,这些操作可能导致带有“错误”十进制分隔符的数字不被识别为数字。

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

但是从我在另一种上下文中使用时间戳的经验来看,具有“错误”格式的时间戳会导致整个列的类型错误。因此,如果您要合并的列中的两个文件之一只有一个具有小数点分隔符,并且该十进制分隔符仅在您的机器上被识别,那么只有在您的机器上,连接才会成功( m假设熊猫可以连接数字列,即使它们的类型不同也是如此。