![](/img/trans.png)
[英]How to convert 'NaN' strings in a pandas Series to null values for 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.