簡體   English   中英

熊貓dropna系列

[英]pandas dropna on series

我有一個熊貓表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

您的代碼的基本問題所在-

filtered_df = df.drop_duplicates

DataFrame.drop_duplicates是一個方法,您需要調用它。

另外,另一個問題是, filtered_df['Price'].dropna(inplace=True)不會執行您想要的操作,因為即使從系列中刪除了值,由於索引存在於數據幀中,它也會再次提出系列中的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()]

演示-

In [42]: 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)})

In [43]: filtered_df = df.drop_duplicates()

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

In [45]: filtered_df
Out[45]:
    Cat Price     sku
0  CatA   4.5  SKU123
1  CatB   4.7  SKU124
5  CatC   4.5  SKU127

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM