#arrays #pandas #dataframe #nan
#массивы #pandas #фрейм данных #nan
Вопрос:
Я использую Python 3.8.8
У меня есть фрейм данных, структурированный следующим образом:
A | B |
---|---|
0 | 1 |
1 | 2 |
2 | 1 |
3 | 7 |
4 | 7 |
5 | 8 |
и массив:
C = [3, 4, 7]
Я хотел бы добавить массив «C» в качестве нового столбца в фрейм данных. Проблема в том, что этот массив имеет другую длину индекса, чем df. Я хотел бы компенсировать разницу в длине в C, заполнив пустые ячейки NaNs. Мой желаемый результат будет выглядеть примерно так:
A | B | C |
---|---|---|
0 | 1 | NaN |
1 | 2 | NaN |
2 | 1 | 3 |
3 | 7 | 4 |
4 | 7 | 7 |
5 | 8 | NaN |
Что я ищу конкретно, так это способ добавления C, начиная с определенного индекса df, но я не знаю, как обойти несоответствие между длиной df и массива.
Спасибо за ваше время
Ответ №1:
Чтобы обойти проблему «разной длины» при помещении вашего списка в фрейм данных, вы можете преобразовать его в pandas
series
. Как только вы это сделаете, вы можете легко добавить его в свой фрейм данных, а остальные значения будут заполнены np.nan
.
В вашем случае вы также можете специально установить index
значение, когда вы преобразуете свой C list
в a series
, которое затем можно присвоить вашему dataframe
. Природа Pandas для выравнивания данных по индексам приведет к размещению ряда по правому индексу
Рассмотрите возможность использования кода ниже:
c = pd.Series([3, 4, 7],index=[2,3,4])
df['C'] = c
С принтами:
A B 0
0 0 1 NaN
1 1 2 NaN
2 2 1 3.0
3 3 7 4.0
4 4 7 7.0
5 5 8 NaN
Переименование 0
должно быть тривиальным.
Комментарии:
1. Спасибо, это то, что я искал!
2.Здесь вам не нужно слияние …. pandas автоматически выровняется по индексам.
c = pd.Series([3, 4, 7],index=[2,3,4])
тогдаdf['C'] = c
выравнивание данных является внутренним3. Абсолютно. Спасибо за исправление и ссылку @Scott. Я обновил соответствующим образом.