【问题标题】:How can I detect bad characters and differences in two dataframes with pandas?如何使用 pandas 检测两个数据帧中的坏字符和差异?
【发布时间】:2021-09-15 02:05:28
【问题描述】:

我有两个数据框,我需要检查测试数据框(df_test)和参考数据框(df_reference)之间的差异。我需要报告测试数据框中不应存在的字符,如单引号或双引号、空格或大写:

list_reference = ['hey', 'ola', 'bonjour', 'Hello']
list_test = ['Hey', 'ol a', 'bon'jour', 'He"llo']

df_reference = pd.DataFrame(list_reference)
df_test = pd.DataFrame(list_test)

我想用 pandas 找到最简单的解决方案,以检测与 df_reference 不同的单词并发出错误消息以指示单词上存在引号、双引号、大写字母或空格来自 df_test。

什么是最好的解决方案?熊猫,python difflib?使用最少代码的解决方案?

谢谢。

【问题讨论】:

  • 欢迎来到Stack Overflow. 请注意这不是代码编写或辅导服务。我们可以帮助解决具体的技术问题,而不是对代码或建议的开放式请求。请编辑您的问题以显示您迄今为止尝试过的内容,以及您需要帮助的具体问题。请参阅How To Ask a Good Question 页面,详细了解如何最好地帮助我们。
  • 您是否想将每个测试词与每个参考词进行比较,或者您是否可以将“嘿”与“嘿”、“奥拉”与“奥尔 a”等进行比较...而无需浏览所有其他单词?
  • 你好@DerekO,我想比较'hey' 和'Hey','ola 和'ol a',等等......而不必经历所有其他词。我想通过信息消息警告数据框参考中存在错误字符

标签: python-3.x pandas dataframe


【解决方案1】:

由于您只需要成对比较测试词和参考词,我会将两个列表放在同一个 DataFrame 中,这样每对词都在同一行中。然后对于您的函数,您可以遍历测试词的每个字母并检查它是否包含在相应的参考词中。这有点骇人听闻,但在您的情况下应该可以工作,因为您正在检查大多数特殊字符。

值得注意的是,此解决方案不适用于重复的多个大写字母(例如,如果您有参考词“Hi”和测试词“HiH”)。如果您可以提供有关测试词性质的更多信息,我很乐意为此提出解决方法。会不会出现上述情况?

list_reference = ['hey', 'ola', 'bonjour', 'Hello']
list_test = ['Hey', 'ol a', 'bon\'jour', 'He"llo']
df = pd.DataFrame({'reference':list_reference, 'test':list_test})

然后创建一个名为“error”的新列,并使用 pandas apply 函数和参数 axis=1 按行应用函数:

df['error'] = df.apply(lambda x: [char for char in x['test'] if char not in x['reference']], axis=1)

结果:

>>> df
  reference      test error
0       hey       Hey   [H]
1       ola      ol a   [ ]
2   bonjour  bon'jour   [']
3     Hello    He"llo   ["]

【讨论】:

    猜你喜欢
    • 2019-08-12
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 2021-11-24
    相关资源
    最近更新 更多