以下合并策略失败:

import pandas as pd
data1 = {'c1': ['J', 'A', 'B'],
         'key': [25, 30, 35]}
df1 = pd.DataFrame(data1)

data2 = {'c2': ['A', 'B', 'C'],
         'key': ["25","30","36"]}
df2 = pd.DataFrame(data2, dtype="O")

df1.key = df1.key.astype("O")

print(df1.merge(df2, on = "key"))

output:
Empty DataFrame
Columns: [c1, key, c2]
Index: []

为什么大Pandas 在这次合并中失败了?我可以将列转换为字符串dtype,如下所示,然后再转换回object,这样就可以工作了:

df1.key = df1.key.astype(str).astype("O")

现在,合并就可以了,并找到匹配的项.我应该如何理解这种行为?

推荐答案

将系列转换为对象并不会使Items成为字符串,它只是使Seriesdtype对象(对象系列可以包含任何内容:整数、浮点数、字符串、列表、类…):

df1['key'] = df1['key'].astype('O')

print(df1['key'].tolist())
# [25, 30, 35]

print(type(df1['key'].iloc[0]))
# <class 'int'>

重要的是将items转换为相同的类型,例如字符串:

df1['key'] = df1['key'].astype(str)

print(df1['key'].tolist())
# ['25', '30', '35']

Python相关问答推荐

Pandas .类型错误:只能将字符串(而不是int)连接到字符串

如何从维基百科的摘要部分/链接列表中抓取链接?

从多行文本中提取事件对

回归回溯-2D数组中的单词搜索

解析讨论论坛只给我第一个用户 comments ,但没有给我其他用户回复

如何匹配3D圆柱体的轴和半径?

Plotly:如何更改Heatmap中彩色条的勾选文本

在Python中管理多个OpenGVBO和VAO实例

数字梯度的意外值

在Python中为变量的缺失值创建虚拟值

配置Sweetviz以分析对象类型列,而无需转换

在函数内部使用eval(),将函数的输入作为字符串的一部分

替换字符串中的多个重叠子字符串

PywinAuto在Windows 11上引发了Memory错误,但在Windows 10上未引发

try 将一行连接到Tensorflow中的矩阵

isinstance()在使用dill.dump和dill.load后,对列表中包含的对象失败

处理具有多个独立头的CSV文件

python panda ExcelWriter切换动态公式到数组公式

numpy.unique如何消除重复列?

Flask Jinja2如果语句总是计算为false&