熊猫包含功能理解

时间:2020-02-12 04:19:47

标签: python pandas

我试图了解熊猫包含功能是如何工作的。

假设我有以下内容:

xyz = ['Copyright', 'Microsoft', 'Abc'];
for i in range(0, len(xyz), 1):
     x = z[z.all_data.str.contains(r'.*' + xyz[i] + '.*', regex=True)]

这就是我解释contains函数的方式:

“搜索DataFrame'z',列称为all_data,其中值 以任何东西开头,包含来自xyz的适当索引值, 然后以任何东西结尾。”

我的理解正确吗?

我有一个看起来像这样的DataFrame:

                                              all_data    file_name    
4    * (c) Copyright abc123 Corp. 2015    All Right...   filename.h

它没有使用“版权”一词,而是试图理解原因。

这是我到目前为止尝试过的:

  1. x = z [z.all_data.str.contains(xyz [i],regex = True)]
  2. x = z [z.all_data.str.contains(r'​​。'+ xyz [i] +'。',regex = True)]

我的代码适用于其他术语,但是该行中有某些内容无法正常工作。

2 个答案:

答案 0 :(得分:0)

猜测您要为每个项目覆盖 x ...因此,如果x为空,则意味着最后一个xyz与任何内容都不匹配

查看此示例

import pandas
a = [
  ["4    * (c) Copyright abc123 Corp. 2015    All Right...","filename.h"],
  ["4    * (c) noCopy-right abc123 Corp. 2015    All Right...","filename.h"],
  ]
df = pandas.DataFrame(a,columns=['all_data','file'])
print(df)
print("MASK:", df.all_data.str.contains("Copyright"))
print("Matches:",df[df.all_data.str.contains("Copyright")])

答案 1 :(得分:0)

我发现我做错了。

之前:

x = z[z.all_data.str.contains(r'.*' + xyz[i] + r'.*', regex=True)]

之后:

x = z[z.all_data.str.contains(r'.*' + xyz[i] + r'.*', case=False,regex=True)]

contains函数中,大小写默认情况下设置为True,因此我必须将其更改为false,以使函数不区分大小写。设置为True时,区分大小写。

我的DataFrame列中具有“版权”,但是我的搜索条件是“版权”。

问题已解决:)