我可以修改一个数据表以匹配另一个几乎相似的数据框ID吗?

2024-10-01 00:34:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有多个数据帧要比较。我的问题是产品ID。其中一个设置如下:

  • 000-000-000-000
  • Vs
  • 000-000-000

(毛额)

我在这里看到了reddit、YouTube,甚至深入兔子洞尝试了。加入、.append,一些我以前从未见过,甚至还不了解的其他方法。是否有一种方法(或者更好的方法,我可以阅读一些文档来了解这一点)从主excel工作表中提取产品ID,并将其与应该匹配的产品ID进行比较。然后,我将更喜欢在所有的表中创建就地ID。这样我就可以使用这些ID作为索引,并将ID与行数据并排比较?每个ID大约有113个值要比较。这是113列,但如果这有意义的话,每行都有113列

示例:(彩色列是将与非彩色列进行比较的主表) enter image description here

补充说明: 突出显示的黄色ID是“唯一的”,我不会更改它们,而是将它们写入列表或其他内容,并使用if语句在找到它们时忽略它们

编辑: 所以我写了这段代码,这几乎是完美的,我需要这样做。 它去掉了我应用于所有ID的“-”。只需要列出一个唯一的ID列表,以便在删除零时跳过

dfSS["Product ID"] = dfSS["Product ID"].str.replace("-", "")

然后,除了唯一ID之外,这将只列出最多9位的数字

dfSS["Product ID"] = dfSS["Product ID"]str[:9]

我将在这里添加完整的代码,一旦我得到它的工作100%

我现在想知道怎么说这样的话

lst =[1,2,3,4,5]
if dfSS["Product ID"] not in lst:
   dfSS["Product ID"] = dfSS["Product ID"].str.replace("-", "").str[:9]

这段代码不起作用,但每天我都越来越接近能够比较这些相似但不同的数据帧。lst只是列表中000-000-000产品ID的一个示例,我根本不想对其进行筛选。但请保留在数据框中


Tags: 数据方法代码id示例列表if产品
2条回答

如果ID转换是可预测的,那么一个选项是使用正则表达式来均匀化ID。例如,如果情况只是删除前三位数字,则可以使用如下内容:

df['short_id'] = df['long_id'].str.extract(r'\d\d\d-([\d-]*)')

如果ID转换不可预测(例如,由于转录错误或数据中的某些其他噪声),那么最好的选择是首先使用类似recordlinkage的方法消除ID转换的歧义,请参见示例here

Ok解决了每个产品ID是否有破折号、#、ltters等的问题

(\d\d\d-)?[_#\d-]?[a-zA-Z]?

(\d\d\d-)-这是第一次&;第二个三个整数集,包含零个或多个匹配项和一个破折号(非贪婪)

[\u35;\ d-]?-这适用于任何特殊字符和附加数字(非贪婪)

[a-zA-Z]?-这个,不知道为什么,但我不得不从最后一部分中分离出来,因为它不能拾取每个字母。(非贪婪)

有了以上这些,我解决了所有我需要的问题

在那里我学会了如何提高我的再培训技能:

RE Documentation

Automate the Boring Stuff- Ch 7

You can test you RE's here

另一种方式来显示这一点。把这个放在这里,表明没有一种方法可以做到这一点。RE超级棒:

(\d{3}-)?[_#\d{3}-]?[a-zA-Z]?

相关问题 更多 >