繁体   English   中英

删除 Nan 值并将其替换为 pandas dataframe 中行的平均值

[英]Delete and replace Nan values with mean of the rows in pandas dataframe

我有一个非常大的 DataFrame,看起来像:

    c1   c2    c3
0  NaN  1.0   NaN
1  NaN  NaN   NaN
2  3.0  6.0   9.0
3  NaN  7.0  10.0
...

我想要:

1- 删除具有所有“Nan”值的行。 就像示例中的第二行。

2- 用行的平均值替换其他行中的所有“Nan”值。

注意:在行中,我们有不同的“Nan”值。 你能帮我吗? 谢谢。

此外,此链接不能解决我的问题: Pandas Dataframe:用行平均值替换 NaN

这是我的 DataFrame 的示例:

import pandas as pd
import numpy as np


df = pd.DataFrame()
df['c1'] = [np.nan, np.nan, 3, np.nan]
df['c2'] = [1, np.nan, 6, 7]
df['c3'] = [np.nan, np.nan, 9, 10]

更新:当我们不想考虑所有行的平均值时。 样本 dataframe:

import pandas as pd
import numpy as np


df = pd.DataFrame()
df['id'] = [1, 2, 3, 4, 5]
df['c1'] = [np.nan, np.nan, 3, np.nan, 5]
df['c2'] = [1, np.nan, 3, 11, 5]
df['c3'] = [1, np.nan, 3, 11, np.nan]
df['c4'] = [3, np.nan, 3, 11, 5]

output: 
df = pd.DataFrame()
df['id'] = [1,  3, 4, 5]
df['c1'] = [ 5/3, 3, 11, 5]
df['c2'] = [1,  3, 11, 5]
df['c3'] = [1,  3, 11, 5]
df['c4'] = [3,  3, 11, 5]
df

对于这部分,我不想考虑 id 的值来计算行的平均值。

这个怎么样:

df = df.T.fillna(df.mean(axis=1)).T.dropna()
print(df)

output:

>>>
    c1   c2    c3
0  1.0  1.0   1.0
2  3.0  6.0   9.0
3  8.5  7.0  10.0

您可以根据列名和行均值创建一个字典,并将其传递给fillna以填充 NaN 值。 然后删除 NaN 行(不会被填充,因为所有 NaN 行的平均值都是 NaN)。

out = df.fillna(dict.fromkeys(df.columns, df.mean(axis=1))).dropna()

另一种可能是转置 DataFrame 并使用fillna填充,然后转置回去:

df_T = df.T
df_T.fillna(df_T.mean()).T.dropna()

Output:

    c1   c2    c3
0  1.0  1.0   1.0
2  3.0  6.0   9.0
3  8.5  7.0  10.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM