我有一张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
答案 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()]