Pandas Как выровнять два столбца в фрейме данных и NaN пустых ячеек

#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. Я обновил соответствующим образом.