大熊猫dropna系列

时间:2015-10-14 06:13:17

标签: python pandas

我有一张pandas表df:

so the df is:

Item    | Category | Price
SKU123  | CatA     | 4.5
SKU124  | CatB     | 4.7
SKU124  | CatB     | 4.7
SKU125  | CatA     | NaN
SKU126  | CatB     | NaN
SKU127  | CatC     | 4.5

这是一个发电机

df = pd.DataFrame({'sku': ('SKU123', 'SKU124', 'SKU124', 'SKU125', 'SKU126', 'SKU127'), 'Cat':('CatA', 'CatB', 'CatB', 'CatA', 'CatB', 'CatC'), 'Price':(4.5, 4.7, 4.7, '', '', 4.5)})

我试图用NaN放弃任何东西。

所以我进入了

filtered_df = df.drop_duplicates
filtered_df['Price'].dropna(inplace=True)

我收到此错误:

TypeError: 'instancemethod' object has no attribute '__getitem__'

我想要的结果是:

Item    | Category | Price
SKU123  | CatA     | 4.5
SKU124  | CatB     | 4.7
SKU127  | CatC     | 4.5

1 个答案:

答案 0 :(得分:1)

您的代码的基本问题在于行 -

filtered_df = df.drop_duplicates

DataFrame.drop_duplicates是一种方法,您需要调用它。

另外,另一个问题是filtered_df['Price'].dropna(inplace=True)不能做你想做的事情,因为即使从系列中删除了值,因为索引存在于数据框中,它将再次出现{系列中的{1}}值。

您可以根据NaN系列的非空值进行布尔索引。示例 -

filtered_df['Price']

但请注意,在您创建数据框的示例中,值为空字符串 - filtered_df = df.drop_duplicates() filtered_df = filtered_df[filtered_df['Price'].notnull()] - 而不是''。如果您控制创建数据框架的方式,则应考虑使用NaN而不是None

但是如果空字符串来自其他地方,则可以使用Series.convert_objects方法在索引时将它们转换为''。示例 -

NaN

演示 -

filtered_df = filtered_df[filtered_df['Price'].convert_objects(convert_numeric=True).notnull()]