Pandas:无法根据字符串相等性进行过滤

2024-03-20

在 python 2.7、OSX 上使用 pandas 0.16.2。

我从 csv 文件中读取数据框,如下所示:

import pandas as pd

data = pd.read_csv("my_csv_file.csv",sep='\t', skiprows=(0), header=(0))

的输出data.dtypes is:

name       object
weight     float64
ethnicity  object
dtype: object

我期待名称和种族的字符串类型。但我在这里找到了为什么它们在较新的 pandas 版本中是“对象”的原因。

现在,我想根据种族选择行,例如:

data[data['ethnicity']=='Asian']
Out[3]: 
Empty DataFrame
Columns: [name, weight, ethnicity]
Index: []

我得到相同的结果data[data.ethnicity=='Asian'] or data[data['ethnicity']=="Asian"].

但是当我尝试以下操作时:

data[data['ethnicity'].str.contains('Asian')].head(3)

我得到了我想要的结果。

但是,我不想使用“包含” - 我想检查是否直接相等。

请注意data[data['ethnicity'].str=='Asian']引发错误。

难道我做错了什么?如何正确地做到这一点?


您的字符串中可能有空格,例如,

data = pd.DataFrame({'ethnicity':[' Asian', '  Asian']})
data.loc[data['ethnicity'].str.contains('Asian'), 'ethnicity'].tolist()
# [' Asian', '  Asian']
print(data[data['ethnicity'].str.contains('Asian')])

yields

  ethnicity
0     Asian
1     Asian

要从字符串中去除前导或尾随空格,您可以使用

data['ethnicity'] = data['ethnicity'].str.strip()

之后,

data.loc[data['ethnicity'] == 'Asian']

yields

  ethnicity
0     Asian
1     Asian
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas:无法根据字符串相等性进行过滤 的相关文章

随机推荐