删除值为 NaN 数组的数据框行
Drop dataframe rows with values that are an array of NaN
我有一个数据框,其中一列中的一些值不仅是“NaN”,而且是一组 NaN(即“[nan, nan, nan]”)
我想将这些值更改为 0。如果只是“nan”,我会使用:
df.fillna(0)
但这在这种情况下不起作用。
例如如果:
df1 = pd.DataFrame({
'ID':[1,2,3,4,5,6],
'Version':[1,1,2,2,1,2],
'Cost':[17,np.nan,24,[np.nan, np.nan, np.nan],13,8]})
使用 df1.fillna(0) 产量:
ID Version Cost
0 1 1 17
1 2 1 0
2 3 2 24
3 4 2 [nan, nan, nan]
4 5 1 13
5 6 2 8
当我想得到输出时:
ID Version Cost
0 1 1 17
1 2 1 0
2 3 2 24
3 4 2 0
4 5 1 13
5 6 2 8
在您的情况下,列 Cost
是一个对象,因此您可以先转换为数字,然后再转换为 fillna
。
import pandas as pd
df = pd.DataFrame({"ID":list(range(1,7)),
"Version":[1,1,2,2,1,2],
"Cost": [17,0,24,['nan', 'nan', 'nan'], 13, 8]})
哪里df.dtypes
ID int64
Version int64
Cost object
dtype: object
因此您可以使用 errors='coerce'
转换此列 to_numeric
,这意味着如果无法转换则分配 np.nan。
df["Cost"] = pd.to_numeric(df["Cost"], errors='coerce')\
.fillna(0)
或者如果您喜欢分两步进行
df["Cost"] = pd.to_numeric(df["Cost"], errors='coerce')
df["Cost"] = df["Cost"].fillna(0)
我有一个数据框,其中一列中的一些值不仅是“NaN”,而且是一组 NaN(即“[nan, nan, nan]”)
我想将这些值更改为 0。如果只是“nan”,我会使用:
df.fillna(0)
但这在这种情况下不起作用。
例如如果:
df1 = pd.DataFrame({
'ID':[1,2,3,4,5,6],
'Version':[1,1,2,2,1,2],
'Cost':[17,np.nan,24,[np.nan, np.nan, np.nan],13,8]})
使用 df1.fillna(0) 产量:
ID Version Cost
0 1 1 17
1 2 1 0
2 3 2 24
3 4 2 [nan, nan, nan]
4 5 1 13
5 6 2 8
当我想得到输出时:
ID Version Cost
0 1 1 17
1 2 1 0
2 3 2 24
3 4 2 0
4 5 1 13
5 6 2 8
在您的情况下,列 Cost
是一个对象,因此您可以先转换为数字,然后再转换为 fillna
。
import pandas as pd
df = pd.DataFrame({"ID":list(range(1,7)),
"Version":[1,1,2,2,1,2],
"Cost": [17,0,24,['nan', 'nan', 'nan'], 13, 8]})
哪里df.dtypes
ID int64
Version int64
Cost object
dtype: object
因此您可以使用 errors='coerce'
转换此列 to_numeric
,这意味着如果无法转换则分配 np.nan。
df["Cost"] = pd.to_numeric(df["Cost"], errors='coerce')\
.fillna(0)
或者如果您喜欢分两步进行
df["Cost"] = pd.to_numeric(df["Cost"], errors='coerce')
df["Cost"] = df["Cost"].fillna(0)