【问题标题】:Merging rows from two files if they have the same column value如果两个文件的列值相同,则合并它们的行
【发布时间】:2019-02-01 20:36:45
【问题描述】:

目前我正在亚马逊网站上搜索一些数据。我遇到的问题是我无法真正从同一页面获取产品的所有数据。

我最终得到的是 2 个文件,它们的列标题相同,但列本身的数据不同。除了一些小事,我几乎从来没有用过 pandas,所以我在这方面的知识不是很好。

例如,在一个 .csv 文件中,产品的“code”“name”“url”“size”包含信息,但在另一个文件中包含“code”“price”“image1”“image2”等等。

如果文件 2 中的代码与文件 1 中的代码相同,最好的方法是什么,将文件 2 中的数据粘贴到文件 1(或只是创建一个新文件)。我可能会使用数以万计的不同产品代码,因此越高效越好。

下面我以链接两个文件为例

文件 1:https://ufile.io/oojru

文件 2:https://ufile.io/cytmq

我会把上面的一些数据写成文本(没有使用所有的标题,因为它看起来不太好)

文件 1

categoriaProducto codigoEspecifico codigoGenerico nombreProducto precioProducto

-                 B072L7PVNQ       -              -              price1
-                 B01D9FKME6       -              -              price2
-                 B077Z5ST3P       -              -              price3
-                 B00KLMFUKC       -              -              price4

文件 2

 categoriaProducto codigoEspecifico codigoGenerico nombreProducto precioProducto

Clothing          B072L7PVNQ       86K5PBAH       name1              -
Clothing          B01D9FKME6       86K5PBAH       name2              -
Clothing          B077Z5ST3P       86K5PBAH       name3              -
Clothing          B00KLMFUKC       86K5PBAH       name4              -

对于上传的文件和文本,代码的顺序相同。值得注意的是,情况可能并非如此。

我还想补充一点,如果产品代码出现在file1中,该代码也会出现在file2中,但不是相反。

我尝试从 file1 数据创建一个新列并将该列粘贴到 file2 数据帧中,然后保存该文件。但是后来我发现代码可能不正确,所以这种方式不起作用。

编辑:我不太清楚我想要什么,我很抱歉。我试图得到的结果是这样的

 categoriaProducto codigoEspecifico codigoGenerico nombreProducto precioProducto

Clothing          B072L7PVNQ       86K5PBAH       name1          price1
Clothing          B01D9FKME6       86K5PBAH       name2          price2
Clothing          B077Z5ST3P       86K5PBAH       name3          price3
Clothing          B00KLMFUKC       86K5PBAH       name4          price4

【问题讨论】:

  • 尝试使用:pd.merge(df1, df2, on='ColumnName')

标签: python python-3.x pandas


【解决方案1】:

我相信您需要dropna 才能仅删除带有combine_firstNaNs 行:

df1= pd.read_csv('example1.csv')
df2= pd.read_csv('example2.csv')

df1 = df1.set_index('codigoEspecificoProducto').dropna(how='all')
df2 = df2.set_index('codigoEspecificoProducto').dropna(how='all')
df = df1.combine_first(df2)

【讨论】:

  • 这种方法有效,但结果很奇怪。我得到带有 _1 的标题和文件 1 数据,旁边是带有 _2 的标题和文件 2 数据。我想要的是,如果 productCode 相同,则基本上将数据从文件 2 粘贴到文件 1 或其他方式
  • 效果很好!谢谢您的帮助!。那么您所做的是将两个数据框与产品代码组合为索引?
  • @Manuel - 确切地说,需要从 codigoEspecificoProducto 列创建索引才能正确匹配两个 DataFrame。
【解决方案2】:

我会将这两个文件放入 pandas 数据框,然后使用 dropduplicates 方法。 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop_duplicates.html

您可以指定要查找其重复项的列。默认情况下,所有列都必须匹配才能标记重复。但这是可配置的。

然后您可以将其保存到单个 csv 文件中

【讨论】:

  • 编辑了帖子以使我想要的更清楚,我的计划是将行合并为一个包含所有数据的行,如果它们具有相同的代码,这种方法是否会删除行?跨度>
  • 对不起,我误会了你。我以为你想删除其中一行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
  • 1970-01-01
  • 2020-05-09
  • 1970-01-01
相关资源
最近更新 更多