【问题标题】:Can I amend one data sheet to match another data frame's ID that are almost similar?我可以修改一个数据表以匹配另一个几乎相似的数据框 ID 吗?
【发布时间】:2021-08-10 07:32:39
【问题描述】:

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

  • 000-000-000-000
  • 对比
  • 000-000-000

(总)

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

示例:(彩色列是与非彩色列进行比较的主工作表)

补充说明: 突出显示的黄色 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]

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

【问题讨论】:

    标签: python excel pandas dataframe matching


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢你。我今天将通读文档并在今晚练习。我忘记了正则表达式。从来没有真正使用过它,但我看到它很受欢迎。所以现在是我学习的机会了,哈哈
    • 不是使用的确切 RE,但这让我走上了正轨。终于深入RE世界,没有“RAGRATs”哈哈。再次感谢您的意见
    【解决方案2】:

    Ok 解决了每个带有或不带有破折号、#、ltters 等的产品 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]?
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      • 2019-09-20
      相关资源
      最近更新 更多