не может установить pandas значений столбца с помощью серии, вместо этого устанавливает все в np.nan - PullRequest
0 голосов
/ 08 мая 2020

У меня есть следующий pandas (pd) фрейм данных:

> df = pd.DataFrame({'x':[1,2,3], 'y':[4,5,6], 'z':[7,8,9]}, index=['one', 'two', 'three'])
> df
       x  y  z
one    1  4  7
two    2  5  8
three  3  6  9

и серия:

s = pd.Series([99,99,99])

Когда я пытаюсь назначить эти значения в b в какой-либо столбец в df, я не получаю никаких ошибок, но вместо этого все значения в этом столбце установлены на nan:

> df['y'] = s
> df
       x   y  z
one    1 NaN  7
two    2 NaN  8
three  3 NaN  9

Я много раз устанавливал значения столбца фрейма данных перед использованием этого назначения техника, почему это не работает (больше)?

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Проблема со значениями индексов в DataFrame и Series: они не совпадают. По умолчанию любой индекс pandas имеет целочисленные значения, которые отсчитываются от 0, поэтому, если вы не измените их, а длины столбца и Series совпадают, проблем нет.

Однако вы изменили значения индекса df и установили для них ['one', 'two', 'three']. Вы должны убедиться, что:

  • либо Series использует тот же индекс, что и DataFrame:

    > s = pd.Series({'one': 99, 'two': 99, 'three': 99})
    > df['y'] = s
    
  • или, вы можете просто использовать значения (без индекса) в s:

    > df['y'] = s.values
    

, чтобы получить:

> df
       x   y  z
one    1  99  7
two    2  99  8
three  3  99  9
0 голосов
/ 08 мая 2020

ICCU:

Другой способ сделать это. Попробуйте df.assign

df.assign(y=s.values)

enter image description here

...