df.fillna(dict) 未填充 NaN 值
df.fillna(dict) is not filling NaN values
我有以下 df:
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
8 NaN
9 NaN
10 NaN
11 NaN
12 {'A': {'B': '14:00', 'C': '12:30', 'D': '07:30'}}
13 NaN
14 NaN
15 {'A': {'B': '14:00', 'C': '12:30', 'D': '08:00'}}
16 NaN
17 {'A': {'B': '14:00', 'C': '13:30', 'D': '08:00'}}
18 {'A': {'B': '08:00', 'C': '08:00', 'D': '08:00'}}
19 NaN
我想用索引 12 处的值填充此 df 的 NaN 值,即
{'A': {'B': '14:00', 'C': '12:30', 'D': '07:30'}}
我尝试了以下代码:
x = {'A': {'B': '14:00', 'C': '12:30', 'D': '07:30'}}
df.fillna(x, inplace= True)
但是,它没有填充任何 NaN
值并且 df 保持不变。当我输入 x=1
时,NaN
值被 1
填充。为什么会这样?有什么解决办法吗?
您可以使用布尔索引代替 .fillna
:
x = {"BLOCK_TIME": {"SPLIT": "14:00", "EVENING": "12:30", "MORNING": "07:30"}}
df[df.isna()] = x
print(df)
打印:
val
0 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
1 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
2 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
3 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
4 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
5 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
6 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
7 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
8 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
9 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
10 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
11 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
12 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
13 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
14 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
15 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
16 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
17 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
18 {'BLOCK_TIME': {'SPLIT': '08:00', 'EVENING': '...
19 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
或(对于一列):
x = {"BLOCK_TIME": {"SPLIT": "14:00", "EVENING": "12:30", "MORNING": "07:30"}}
df.loc[df["val"].isna(), "val"] = df.loc[df["val"].isna(), "val"].apply(
lambda _: x
)
print(df)
我们仍然可以尝试 fillna
但需要传递索引 dict
df = df.fillna({12:{'A': {'B': '14:00', 'C': '12:30', 'D': '07:30'}}})
我有以下 df:
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
8 NaN
9 NaN
10 NaN
11 NaN
12 {'A': {'B': '14:00', 'C': '12:30', 'D': '07:30'}}
13 NaN
14 NaN
15 {'A': {'B': '14:00', 'C': '12:30', 'D': '08:00'}}
16 NaN
17 {'A': {'B': '14:00', 'C': '13:30', 'D': '08:00'}}
18 {'A': {'B': '08:00', 'C': '08:00', 'D': '08:00'}}
19 NaN
我想用索引 12 处的值填充此 df 的 NaN 值,即
{'A': {'B': '14:00', 'C': '12:30', 'D': '07:30'}}
我尝试了以下代码:
x = {'A': {'B': '14:00', 'C': '12:30', 'D': '07:30'}}
df.fillna(x, inplace= True)
但是,它没有填充任何 NaN
值并且 df 保持不变。当我输入 x=1
时,NaN
值被 1
填充。为什么会这样?有什么解决办法吗?
您可以使用布尔索引代替 .fillna
:
x = {"BLOCK_TIME": {"SPLIT": "14:00", "EVENING": "12:30", "MORNING": "07:30"}}
df[df.isna()] = x
print(df)
打印:
val
0 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
1 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
2 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
3 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
4 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
5 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
6 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
7 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
8 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
9 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
10 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
11 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
12 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
13 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
14 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
15 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
16 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
17 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
18 {'BLOCK_TIME': {'SPLIT': '08:00', 'EVENING': '...
19 {'BLOCK_TIME': {'SPLIT': '14:00', 'EVENING': '...
或(对于一列):
x = {"BLOCK_TIME": {"SPLIT": "14:00", "EVENING": "12:30", "MORNING": "07:30"}}
df.loc[df["val"].isna(), "val"] = df.loc[df["val"].isna(), "val"].apply(
lambda _: x
)
print(df)
我们仍然可以尝试 fillna
但需要传递索引 dict
df = df.fillna({12:{'A': {'B': '14:00', 'C': '12:30', 'D': '07:30'}}})