删除值为 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)