Python Pandas 合并不起作用

Posted

技术标签:

【中文标题】Python Pandas 合并不起作用【英文标题】:Python Pandas Merge Won't Work 【发布时间】:2022-01-19 11:47:20 【问题描述】:

我有两个 Python Pandas 数据帧:

Inventory_Info(20 行):

Group, Facility, Unit, Room, HardwareAddress
'Generic Hospital Group', 'Generic Hospital', 'Generic Hospital Ward', 'Generic Hospital Room', 5715

Data(47 行):

Serial_Number, Last_Server_Check, Num_Check_Ins, HardwareAddress
00BA0F42, 23, 1/18/17 20:38, 3906

Inventory_Info.HardwareAddress 的所有 20 个值都出现在 Data.HardwareAddress 中。

我试过了,但它没有合并数据。我从两个 DataFrame 中获取列名,但只包含 Data 的内容。

finalDataSet = pandas.DataFrame.merge(Data, Inventory_Info, how='left', on='HardwareAddress')

同样,我尝试过翻转 DataFrame 顺序:

finalDataSet = pandas.DataFrame.merge(Inventory_Info, Data, how='left', on='HardwareAddress')

我得到了合并的列名,但现在只显示Inventory_Info 数据。

我尝试过使用这种合并语法:

finalDataSet = webData.merge(rawData, left_index='HardwareAddress', right_on='HardwareAddress')

虽然此语法将数据转换为正确的格式并填充所有列,但 HardwareAddress 索引上的数据不匹配,并且其排列错误。

【问题讨论】:

首先,您需要发布每个DataFrame的头部。接下来,将 pandas 别名为pd。最后,不要使用 pandas.DataFrame.merge。使用pd.merge 我刚才试了pd.merge,结果和pd.DataFrame.merge一样。 请编辑您的问题并粘贴print(Data.head())print(Inventory_Info.head())的结果 Inventory_Info.HardwareAddress 的所有 20 个值都出现在 Data.HardwareAddress 中...没有我们无法复制的数据,只能相信您的话。另外 我从两个 DataFrame 中获取列名,但只包含 Data 的内容。...您的意思是 NaN 返回吗?请注意您使用的是 left 连接,因此非匹配项会返回 NaN。 【参考方案1】:

我终于解决了这个问题。

Inventory_Info.dtypesData.dtypes 分别显示 HardwareAddressobject 类型。我使用了Data['HardwareAddress'].astype(int)Inventory_Info['HardwareAddress'].astype(int),然后DataFrame 完全按预期合并。

【讨论】:

以上是关于Python Pandas 合并不起作用的主要内容,如果未能解决你的问题,请参考以下文章

pandas - 合并字符串列不起作用(错误?)

df.head() 有时在 Pandas、Python 中不起作用

在 .bat 文件中使用 Python 导入 pandas 时不起作用

Python Pandas Fillna 中位数不起作用

Yahoo Finance API / URL 不起作用:Pandas DataReader 的 Python 修复

python pandas 从日期时间中提取年份:df['year'] = df['date'].year 不起作用