根据reference page of Pandas.DataFrame.fillna,使用指定方法填充所有NA/NaN值。
但是,在存在pd.NA值的情况下,它不起作用。
正如你在下面的代码块中看到的,如果我想用列的模式替换丢失的布尔值(用pd.NA值标记),它是不起作用的:
import pandas as pd
import numpy as np
# create dataframe
df = pd.DataFrame({"a": [True, pd.NA, False, True], "b": [0, np.nan, 2, 3]})
# convert types (a becomes boolean, b becomes Int64)
df = df.convert_dtypes()
# get boolean columns
bool_cols = df.select_dtypes(include=bool).columns.tolist()
# get most frequent values
most_frequent_values = df[bool_cols].mode()
# replace missing content with column's mode
df[bool_cols] = df[bool_cols].fillna(most_frequent_values)
# print
print(df)
这是当前输出:
| 身份证|项目a|B|
| - ------|- ------|- ------|
| 无|真的|无|
| 1个|||
| 第二章|假|第二章|
| 三个|真的|三个|
虽然这是预期的输出:
| 身份证|项目a|B|
| - ------|- ------|- ------|
| 无|真的|无|
| 1个|真的||
| 第二章|假|第二章|
| 三个|真的|三个|
我错过了什么?我应该把所有的pd.na转换成NaNs吗?
旁注:我的Pandas版本是1.5.2
1条答案
按热度按时间zour9fqk1#
问题是
mode
不返回单个值,而是返回2D输出。您需要更改:
则输出正确: