基于文本字段在 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