Python: Round() 不适用于我的 fillna()

Python: Round() is not working with my fillna()

import seaborn
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

passengers = pd.read_csv('passengers.csv')
#passengers['Age'].fillna(value=round(passengers['Age'].mean()), inplace=True)
passengers['Age'].fillna(value=round(np.mean(passengers['Age'])), inplace=True)

这是我试过的两种不同的代码。

我的想法是用乘客的平均年龄填充任何 na,我想通过四舍五入更进一步。

在 Codecademy 的终端中它可以工作,但在我的 Jupyter Notebook 中它不会四舍五入。

我是不是做错了什么?

尝试使用 sklearn 中的 SimpleImputer() 这是官方文档中的工作示例:

import numpy as np
from sklearn.impute import SimpleImputer

imp_mean = SimpleImputer(missing_values=np.nan, strategy='mean')
imp_mean.fit([[7, 2, 3], [4, np.nan, 6], [10, 5, 9]]) # your column

X = [[np.nan, 2, 3], [4, np.nan, 6], [10, np.nan, 9]]
print(imp_mean.transform(X))
>>
[[ 7.   2.   3. ]
 [ 4.   3.5  6. ]
 [10.   3.5  9. ]]

您可以选择 均值、中位数、众数等。请参阅official documentation

您可以像 passengers['Age'] = imp_mean.fit_transform(passengers['Age'])

一样直接对每一列一次性使用 fit_transform

获得更新后的列后,您可以在列上使用 roundapply(),例如 passengers['Age'] = passengers['Age'].apply(lambda x: round(x))

这可能不是最有效的解决方案,但它会起作用 ;)