我有一個如下的資料框。DataFrame 的列"b"具有最多 5 個數字的字串值。因此,我想考慮少于 5 個數字的行中的缺失值。例如,第二行有 2 個數字,我用 4 和 6 的平均值填充該行。對于第三行,我也想要同樣的東西。
import pandas as pd
df = pd.DataFrame()
df['a'] = [ 1, 2, 3 ]
df['b'] = [ '2, 3, 4, 5,6' , '4,6', ' 6,8']

我這里是我想要的 DataFrame。

uj5u.com熱心網友回復:
這是一種方法:
用逗號分割并展開創建一個 DataFrame;然后mask是具有 NaN 值的行并用平均值填充它們:
tmp = df['b'].str.split(',', expand=True).astype(float)
df[[f'b{i}' for i in range(1,tmp.shape[1] 1)]] = (tmp.mask(tmp.isna().any(axis=1))
.T.fillna(tmp.mean(axis=1)).T
.astype(int))
df = df.drop(columns='b')
輸出:
a b1 b2 b3 b4 b5
0 1 2 3 4 5 6
1 2 5 5 5 5 5
2 3 7 7 7 7 7
uj5u.com熱心網友回復:
我們應用于evalb 列,用填充平均值的 5 大小的元組替換短元組,擴展為列并重命名列
df2 = (df['b'].apply(eval)
.apply(lambda t: t if len(t)==5 else (sum(t)/len(t),)*5)
.apply(pd.Series)
.rename(columns = lambda n:f'b{n 1}')
)
然后我們將它加入到原始列 a
df[['a']].join(df2)
輸出:
a b1 b2 b3 b4 b5
0 1 2.0 3.0 4.0 5.0 6.0
1 2 5.0 5.0 5.0 5.0 5.0
2 3 7.0 7.0 7.0 7.0 7.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/434716.html
上一篇:逐行將NaN替換為列值
下一篇:熊貓合并行和求和值?
