Pandas: 无法根据字符串相等性进行过滤
Pandas: cannot filter based on string equality
在 python 2.7 上使用 pandas 0.16.2,OSX。
我从这样的 csv 文件中读取数据帧:
import pandas as pd
data = pd.read_csv("my_csv_file.csv",sep='\t', skiprows=(0), header=(0))
data.dtypes
的输出是:
name object
weight float64
ethnicity object
dtype: object
我期待姓名和种族的字符串类型。但是我在这里找到了为什么它们在较新的 pandas 版本中 "object" 的原因。
现在,我想 select 基于种族的行,例如:
data[data['ethnicity']=='Asian']
Out[3]:
Empty DataFrame
Columns: [name, weight, ethnicity]
Index: []
我得到与 data[data.ethnicity=='Asian']
或 data[data['ethnicity']=="Asian"]
相同的结果。
但是当我尝试以下操作时:
data[data['ethnicity'].str.contains('Asian')].head(3)
我得到了我想要的结果。
但是,我不想使用 "contains"- 我想检查直接相等性。
请注意 data[data['ethnicity'].str=='Asian']
会引发错误。
我做错了什么吗?如何正确执行此操作?
你可以试试这个:
data[data['ethnicity'].str.strip()=='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')])
产量
ethnicity
0 Asian
1 Asian
要从字符串中去除前导或尾随空格,您可以使用
data['ethnicity'] = data['ethnicity'].str.strip()
之后,
data.loc[data['ethnicity'] == 'Asian']
产量
ethnicity
0 Asian
1 Asian
在 python 2.7 上使用 pandas 0.16.2,OSX。
我从这样的 csv 文件中读取数据帧:
import pandas as pd
data = pd.read_csv("my_csv_file.csv",sep='\t', skiprows=(0), header=(0))
data.dtypes
的输出是:
name object
weight float64
ethnicity object
dtype: object
我期待姓名和种族的字符串类型。但是我在这里找到了为什么它们在较新的 pandas 版本中 "object" 的原因。
现在,我想 select 基于种族的行,例如:
data[data['ethnicity']=='Asian']
Out[3]:
Empty DataFrame
Columns: [name, weight, ethnicity]
Index: []
我得到与 data[data.ethnicity=='Asian']
或 data[data['ethnicity']=="Asian"]
相同的结果。
但是当我尝试以下操作时:
data[data['ethnicity'].str.contains('Asian')].head(3)
我得到了我想要的结果。
但是,我不想使用 "contains"- 我想检查直接相等性。
请注意 data[data['ethnicity'].str=='Asian']
会引发错误。
我做错了什么吗?如何正确执行此操作?
你可以试试这个:
data[data['ethnicity'].str.strip()=='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')])
产量
ethnicity
0 Asian
1 Asian
要从字符串中去除前导或尾随空格,您可以使用
data['ethnicity'] = data['ethnicity'].str.strip()
之后,
data.loc[data['ethnicity'] == 'Asian']
产量
ethnicity
0 Asian
1 Asian