Python Pandas Fillna 中位数不起作用

标签 python python-3.x python-2.7 pandas dataframe

我正在尝试将所有 nans 填充到包含多列和多行的数据框中。我正在使用它来训练多变量 ML 模型,所以我想用中位数填充每列的 nans。只是为了测试我这样做的中值函数:

training_df.loc[[0]] = np.nan # Sets first row to nan
print(training_df.isnull().values.any()) # Prints true because we just inserted nans
test = training_df.fillna(training_df.median()) # Fillna with median
print(test.isnull().values.any()) # Check afterwards

但是当我这样做时没有任何反应,最后一行的打印仍然返回 True。如果我尝试改为使用这样的中值函数:

training_df.fillna(training_df.median(), inplace=True)

也没有任何反应。如果我这样做:

training_df = training_df.fillna(training_df.median(), inplace=True)

Training_df 变为无。我该如何解决这个问题?

最佳答案

正如@thesilkworm 建议的那样,首先将您的系列转换为数字。下面是一个最小的例子:

import pandas as pd, numpy as np

df = pd.DataFrame([[np.nan, np.nan, np.nan],
                   [5, 1, 2, 'hello'],
                   [1, 4, 3, 4],
                   [9, 8, 7, 6]], dtype=object)

df = df.fillna(df.median())  # fails

df[df.columns] = df[df.columns].apply(pd.to_numeric, errors='coerce')

df = df.fillna(df.median())  # works

关于Python Pandas Fillna 中位数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49127897/

相关文章:

python-2.7 - 如何根据 Pandas 中的条件按行计算列的值

python - 使用python获取xml节点的所有父节点

python - 如何减去两个不同数据帧之间的行并替换原始值?

python - 与路由器的连接打不开

python - 如何使用 mpl_toolkits.axes_grid1.inset_locator.mark_inset 控制 zorder 和裁剪?

python - Curses 使用 Python 编程

python - defaultdict 可以接受依赖于给定缺失键的可调用项吗?

python - 在 django 中启用应用程序模板的覆盖?

python - 使用类名在Python中设置描述符属性的值

python - Numpy:需要帮助理解 "in"运算符发生了什么