我将csv文件导入数据框。然后我想要消除其中一个系列中包含特定字符串的任何记录。例如:
import pandas as pd
df = pd.read_csv(filepath)
print df.head(3)
给出
identity quantity fruit
0 1 3 apples
1 2 4 oranges
2 3 8 apples
然后我要删除任何包含苹果的记录。我的尝试主要围绕表达式
的变化df = df[df.fruit != 'apples']
然而这会引发错误
TypeError: invalid type comparison
在检查数据类型时,我可以看到水果系列实际上存储为对象类型,显然不能直接与字符串进行比较
df.dtypes
id int64
identity float64
quantity float64
fruit object
我已经尝试了几种解决问题的方法,包括将数据导入为
df = pd.read_csv(filepath, dtype={'fruit':str})
删除了错误消息,但是当我使用布尔表达式时,删除我想要删除的记录实际上没有任何影响。
对此有任何解决方案或解决方法吗?
修改
检查类型
type(df.fruit)
<class 'pandas.core.series.Series'>
并将数据框打印为字典
print df.to_dict()
{'identity': {0: 1.0, 1: 2.0, 2: 3.0}, 'quantity': {0: 3.0, 1: 4.0, 2: 8.0},
'fruit': {0: 'apples', 1: 'oranges', 2: 'apples'}}
使用替代表达式
df = df[df['fruit'] != 'apples']
也会引发类型比较错误,而
df[df.fruit.astype('str') != 'apples']
不会引发任何错误,但也不会删除所需的记录。
我实际上找到了一个解决方案。如果我编写一个可以使用参数调用的函数&#34;删除&#34;
def CleanFruit(df, remove=None):
df = df[df.fruit != remove]
return df
df = CleanFruit(df, remove='apples')
这产生了预期的结果,但我不知道它为什么会起作用。