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

Can I amend one data sheet to match another data frame's ID that are almost similar?

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

(毛)

我看过这里、reddit、YouTube,甚至深入尝试过 .join、.append,以及一些我以前从未见过甚至理解的其他方法。有没有一种方法(或者更好的是一些我可以继续阅读以了解这一点的文档)从 Main excel sheet 中提取产品 ID,将其与应该匹配的产品 ID 进行比较。然后我会更喜欢在所有 sheet 中创建就地 ID。这样我就可以将这些 ID 用作索引并将 ID 与行数据进行并排比较?每个 ID 大约有 113 个值可供比较。那是 113 列,但对于每一行,如果有意义的话

示例:(彩色列是主要 sheet,非彩色列将与之进行比较)

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

编辑: 所以我写了这段代码,这几乎是我需要做的。 它去掉了我应用于所有 ID 的“-”。只需要制作一个唯一的 ID 列表,以跳过带走零

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

那么这将只列出最多 9 位数字,唯一 ID 除外

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]

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

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

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

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

好的,每个带有或不带有破折号、#、字母等的产品 ID 都解决了这个问题。

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

(\d\d\d-)? -这是针对前三个整数集,带有零个或多个匹配项和破折号(非贪婪)

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

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

通过以上,我解决了 RE 所需的一切。

我在哪里学习如何提高我的 RE 技能:

RE Documentation

Automate the Boring Stuff- Ch 7

You can test you RE's here

显示此内容的其他方式。把它放在这里是为了表明没有一种方法可以做到这一点。 RE 超级棒:

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