У меня есть стол в пандах df

    id     count
0     10       3
1     20       4
2     30       5
3     40       NaN
4     50       NaN
5     60       NaN
6     70       NaN

Также у меня есть другая серия панд с

0   1000
1   2000
2   3000
3   4000

Что я хочу сделать, это заменить значения NaN в моем DF с соответствующими значениями из серии с. мой окончательный результат должен быть

    id     count
0     10       3
1     20       4
2     30       5
3     40       1000
4     50       2000
5     60       3000
6     70       4000

Есть идеи, как этого добиться?

Заранее спасибо.

-3
Shubham R 8 Дек 2016 в 16:18

4 ответа

Лучший ответ

Проблема lenght в Series отличается от длины значений NaN в столбце count. Поэтому вам нужен reindex Series длиной NaN:

s = pd.Series({0: 1000, 1: 2000, 2: 3000, 3: 4000, 5: 5000})
print (s)
0    1000
1    2000
2    3000
3    4000
5    5000
dtype: int64

df.loc[df['count'].isnull(), 'count'] = 
s.reindex(np.arange(df['count'].isnull().sum())).values
print (df)
   id   count
0  10     3.0
1  20     4.0
2  30     5.0
3  40  1000.0
4  50  2000.0
5  60  3000.0
6  70  4000.0
2
jezrael 8 Дек 2016 в 13:34

Это так просто, как это:

df.count[df.count.isnull()] = s.values
1
John Zwinck 8 Дек 2016 в 13:23

Вы можете переиндексировать вашу Серию с индексами np.nan из фрейма данных и затем fillna() с вашей Серией:

s.index = np.where(df['count'].isnull())[0]
df['count'] = df['count'].fillna(s)
print(df)

   id   count
0  10     3.0
1  20     4.0
2  30     5.0
3  40  1000.0
4  50  2000.0
5  60  3000.0
6  70  4000.0
0
Dmitriy K. 8 Дек 2016 в 14:27

В этом случае я предпочитаю iterrows за его читабельность.

counter = 0    
for index, row in df.iterrows():
    if row['count'].isnull():
        df.set_value(index, 'count', s[counter])
        counter += 1

Могу добавить, что это «слияние» рядов dataframe + немного странно и подвержено странным ошибкам. Если вы можете каким-то образом преобразовать ряд в тот же формат, что и в фрейм данных (или добавить некоторые теги index / column, то вам может быть лучше использовать функцию слияния).

0
Eric 8 Дек 2016 в 13:44