使用不同类型的列进行过滤

时间:2018-08-08 14:01:24

标签: python pandas dataframe indexing filtering

我是python的新手,我在过滤方面苦苦挣扎。 我正在python中运行以下命令:

DataFrame[(DataFrame.column1<2 & DataFrame.column2=='text')]

我得到的错误是

cannot compare a dtyped [object] array with a scalar of type [bool]

Column1是float64类型,而column2是object。 过滤器必须是两者的组合。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

pd.DataFrame.__getitem__或等效语法df[]不允许布尔索引。相反,您应该使用pd.DataFrame.loc。此外,您应在每个条件周围加上括号,以避免链式比较。例如:

mask = (df['column1'] < 2) & (df['column2'] == 'text')
df = df.loc[mask]

还请注意,您不应该为数据框命名DataFrame,这会掩盖类名。

对于object dtype,请注意,熊猫没有str dtype,这些对象存储在object dtype系列中。另请参见How to convert column with dtype as object to string in Pandas Dataframe。您无需进行任何转换,如果需要,可以使用df['column2'].astype(str) == 'text'

答案 1 :(得分:1)

这是您应使用的语法的简短示例

import pandas as pd
df = pd.DataFrame()
# filling both columns with data

df[(df['column1']<2) & (df['column2']=='text')]