【问题标题】:Replace cells with specific terms用特定术语替换单元格
【发布时间】:2020-05-19 17:31:54
【问题描述】:

我想在数据框中用"N/A" 替换包含"conference""group" 的单词。 例如 “AAAI 会议”->“N/A”“阿里巴巴集团”->“N/A”

数据框名为name,我尝试了两种方法:

columns=['nameCurrentEmployer',
       'name2ndEmployer', 'name3rdEmployer',
       'name4thEmployer', 'name5thEmployer',
       'name6thEmployer', 'name7thEmployer',
       'name8thEmployer', 'name9thEmployer',
       'name10thEmployer'] 
name.loc[name.str.contains(['conference','group'], case=False), columns] = 'N/A'

提示错误AttributeError: 'DataFrame' object has no attribute 'str'

NAMES = pd.Series(name.values.flatten())
NAMES.loc[NAMES.str.contains(['conference','group'], case=False), columns] = 'N/A'

现在错误是

TypeError: unhashable type: 'list'

非常感谢。

【问题讨论】:

  • 我建议您改用 pandas str replace 并可能使用包含单词“会议”或“组”的正则表达式
  • 你用字符串 'N/A' 做什么?你为什么要做 pd.Series(name.values.flatten()) ?你能分享更多你的程序吗?变量和函数名称应遵循lower_case_with_underscores 样式。始终共享整个错误消息。你没有minimal reproducible example吗?
  • 另外,这不只是stackoverflow.com/questions/39602824/… 的更糟糕的复制吗?
  • @sammywemmy 谢谢,str 替换工作。

标签: python pandas dataframe


【解决方案1】:

str.contains() 拍摄

字符序列或正则表达式。


所以你应该使用'conference|group'而不是['conference','group']

NAMES.loc[NAMES.str.contains('conference|group', case=False), columns] = 'N/A'

或者,我建议使用apply()

NAMES.name = NAMES.name.apply(lambda x: 'N/A' if 'conference' in x else x)

str.replace()

【讨论】:

  • 谢谢你,乔治。但它仍然提示两个错误: 1.TypeError: 'Series' 对象是可变的,因此它们不能被散列 2.Indexing Error 我应该如何解决它或者有没有其他方法可以做同样的工作?再次感谢。
  • 为什么不推荐使用DataFrame.replace,而不是不必要的尴尬.loc[]方法?
  • @RenzhiZhao 你能谈谈第一个评论者和我提出的观点吗?
  • @AMC 谢谢你,AMC。更换作品。你真的帮了我大忙,给了我关于提出好问题的好教训。
猜你喜欢
  • 2022-11-13
  • 2011-05-01
  • 2021-10-28
  • 2016-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
相关资源
最近更新 更多