基于文本字段在 Pandas Dataframes 中合并 CSV 文件

Posted

技术标签:

【中文标题】基于文本字段在 Pandas Dataframes 中合并 CSV 文件【英文标题】:Merge CSV files in a Pandas Dataframes based on a Text Field 【发布时间】:2019-12-12 13:12:57 【问题描述】:

我有两个 csv 文件,我正在尝试使用以下代码将其合并到一个数据框中:

import pandas as pd
df_1 = pd.read_csv('A.csv')
df_2 = pd.read_csv('B.csv')
df_3 = df_1.merge(df_2, on='Material_Number_ID', how='left')   

我试图将它们合并到 (Material_Number_ID) 上的字段是一个 12 位数字,当我将其保存为 csv 时,它会转换为文本字段。这阻止了我将该字段用作链接,因为它无法识别数字不同。

Dataframe A:
  Material_Number_ID   Material_Type
0        4.920000e+11  FINISHED GOODS
1        4.920000e+11  FINISHED GOODS

Dataframe B:
   Material_Number_ID    Merch_Org
0        4.920000e+11  ACCESSORIES

Output:  
 Material_Number_ID   Material_Type    Merch_Org
0        4.920000e+11  FINISHED GOODS  ACCESSORIES
1        4.920000e+11  FINISHED GOODS  ACCESSORIES

问题是第 1 行不应该找到匹配项,因为在原始编号的第 12 位,Material_Number_ID 不同。

预期输出是

 Material_Number_ID   Material_Type    Merch_Org
0        4.920000e+11  FINISHED GOODS  ACCESSORIES
1        4.920000e+11  FINISHED GOODS  NaN

我知道答案是以某种方式更改材料编号,但我不知道正确的方法。

谢谢!

【问题讨论】:

【参考方案1】:

从此thread,当您从 csv 导入时,pandas 会将数字读取为浮点数。如果使用以下代码将它们转换为 int64,它应该会显示 Material_Number_ID 的所有数字。

df_1['Material_Number_ID'] = df_1['Material_Number_ID'].astype('int64')
df_2['Material_Number_ID'] = df_2['Material_Number_ID'].astype('int64')

【讨论】:

以上是关于基于文本字段在 Pandas Dataframes 中合并 CSV 文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 List Comprehension (Pandas) 从 DataFrames 列表中删除 DataFrames 列

Pandas文摘:Applying Operations Over pandas Dataframes

来自 DataFrames 的点箱图

python Pandas - 过滤DataFrames和Series

python 创建Pandas DataFrames

在 Python 中处理 pandas DataFrames 列划分中的零