Как заполнить недостающие половые данные, используя соотношение в питоне? - PullRequest
0 голосов
/ 17 мая 2019

Я хочу заполнить недостающие данные пола пропорционально в наборе данных.

Я использую булевы индексы и функцию головы или хвоста, чтобы выбрать самые нужные данные, но когда я использую функцию заполнения, этоне работает. но после того, как я попробую, он работает только без логического индекса, как я могу получить 3 верхних пустых значения в примере и заполнить их 0.

a = pd.DataFrame(np.random.randn(50).reshape((10,5)))
a[0][1,3,4,6,9] = np.nan
a[0][a[0].isnull()].head(3).fillna(value = '0', inplace = True)

, когда фрейм данных не заполнилNaN

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Вам следует использовать функцию loc, иначе вы никогда не будете приписывать значение. Вот что вы могли бы сделать:

a.loc[a[0].isnull().index[0:3], 0] = 0

In [1] : print(a)
Out[1] : 0  1   2   3   4
0   0.786182    -0.474953   -0.285881   -0.285502   -0.541957
1   0.000000    0.648042    1.104871    1.237512    -0.156453
2   -1.327987   1.851947    -0.522366   0.631213    -0.960167
3   0.000000    0.561111    -0.945439   -1.414678   0.433246
4   0.000000    -1.463828   0.141122    1.468288    0.649452
5   1.554890    -0.411142   -1.162577   -0.186640   0.774959
6   0.000000    -0.061410   -0.312673   -1.324719   1.763257
7   0.587035    0.265302    -0.793746   -0.148613   0.059330
8   0.909685    1.169786    -1.289559   -0.090185   -0.024272
9   0.000000    0.606329    -0.806034   1.102597    0.820976
0 голосов
/ 17 мая 2019

Начиная с данных:

a = pd.DataFrame(np.random.randn(50).reshape((10,5)))
a[0][1,3,4,6,9] = np.nan

дает

          0         1         2         3         4
0 -0.388759 -0.660923  0.385984  0.933920  0.164083
1       NaN -0.996237 -0.384492  0.191026 -1.168100
2 -0.773971  0.453441 -0.543590  0.768267 -1.127085
3       NaN -1.051186 -2.251681 -0.575438  1.642082
4       NaN  0.123432  1.063412 -1.556765  0.839855
5 -1.678960 -1.617817 -1.344757 -1.469698  0.276604
6       NaN -0.813213 -0.077575 -0.064179  1.960611
7  1.256771 -0.541197 -1.577126 -1.723853  0.028666
8  0.236197  0.868503 -1.304098 -1.578005 -0.632721
9       NaN -0.227659 -0.857427  0.010257 -1.884986

Теперь вы хотите работать с нулевым столбцом, поэтому мы используем fillna с пределом 3 и заменяем этот столбец на месте

a[0].fillna(0, inplace=True, limit=3)

1010 * дает *

          0         1         2         3         4
0 -0.388759 -0.660923  0.385984  0.933920  0.164083
1  0.000000 -0.996237 -0.384492  0.191026 -1.168100
2 -0.773971  0.453441 -0.543590  0.768267 -1.127085
3  0.000000 -1.051186 -2.251681 -0.575438  1.642082
4  0.000000  0.123432  1.063412 -1.556765  0.839855
5 -1.678960 -1.617817 -1.344757 -1.469698  0.276604
6       NaN -0.813213 -0.077575 -0.064179  1.960611
7  1.256771 -0.541197 -1.577126 -1.723853  0.028666
8  0.236197  0.868503 -1.304098 -1.578005 -0.632721
9       NaN -0.227659 -0.857427  0.010257 -1.884986
...