2016-10-20 1 views
1

Я борюсь со странной ошибкой, которую я не могу понять. Может быть, это что-то очень основное, что я упускаю из виду. Код выглядит следующим образом:Дикие NaN появляются при добавлении серии pandas в качестве столбца в DataFrame

df = pd.DataFrame(
    some_numpy_array, 
    columns=[i for i in range(N)]) 

df.shape 
(57058, 20) 

some_pd_series.shape 
(57058,) 

df["Text"] = some_pd_series 

sum(some_pd_series.isnull()) 
0 

sum(df["Text"].isnull()) 
21137 

df["Text"] должна быть точно такой же, как some_pd_series, верно? Итак, откуда же все эти NaN s внезапно появились?

+3

Хотя форма серии могут быть одинаковыми не могут иметь одинаковые индексные метки, что значит 'LEN (df.index.intersection (some_pd_series.index)) 'show? Если это не то же самое, что и 57058, тогда метки индексов не совпадают, это приведет к «NaN», где метки индексов существуют в вашем 'df', но не в' some_pd_series' – EdChum

+0

Вы можете исправить это, выполнив 'some_pd_series.index = df.index', тогда назначение столбца будет просто работать – EdChum

+0

@EdChum Да, вы правы. Выполнение 'some_pd_series.reset_index (drop = True, inplace = True)' перед добавлением в 'df' также выполнило трюк. Спасибо, сэр! – machaerus

ответ

1

Благодаря комментарию @EdChum я выяснил, что проблема была вызвана не совпадающими индексами. Это произошло потому, что раньше я удалял дубликаты от some_pd_series, что привело к появлению «дыр» в его индексе.

Возможные пути решения этой проблемы включают в себя:

  1. some_pd_series.index = df.index
  2. some_pd_series.reset_index(drop=True, inplace=True)
Смежные вопросы