pandas concat ValueError — переданные значения не совпадают с подразумеваемыми индексами

#python-3.x #pandas #numpy

#python-3.x #pandas #numpy

Вопрос:

Я пытаюсь объединить 2 серии в фрейм данных, подобный этому

 c_dist_df = pd.concat([d.value_counts(), v.value_counts()], axis=1, sort=True)
  

и я получаю ошибку —

Ошибка ValueError: форма передаваемых значений равна (2, 7), индексы подразумевают (2, 5)

Вот как выглядят мои входные данные series

 d.value_counts()
(-0.001, 8.0]     2121
(127.0, 215.0]    2017
(36.0, 127.0]     2006
(215.0, 695.0]    2003
(8.0, 36.0]       1914
Name: X, dtype: int64

v.value_counts()
(215.0, 695.0]    204
(36.0, 127.0]     204
(127.0, 215.0]    202
(-0.001, 8.0]     196
(8.0, 36.0]       177
Name: X, dtype: int64
  

Формы и значения индекса одинаковы —

 np.shape(d.value_counts()) //returns (5,)
np.shape(v.value_counts()) //returns (5,)
  

Я не могу понять, какова форма переданных значений (2, 7). Кто-нибудь может помочь?

Я использую Python version 3.7.0 и Pandas version 0.23.4

Комментарии:

1. Можете ли вы предоставить образец ваших данных? Я попробовал ваш код на 2 случайных сериях, и он отлично работает.

2. Данные в вопросе — это фактические данные, с которыми я работаю. Если это помогает, индекс ряда имеет pandas.interval класс

Ответ №1:

Вам нужно указать join_axes параметр. Попробуйте:

 d_val = d.value_counts()
v_val = v.value_counts()

pd.concat([d_val, v_val], axis=1, join_axes=[d_val.index], sort=True)
  

Некоторые другие альтернативы:

  1. Используйте join вместо concat . Но поскольку join их можно использовать только для фреймов данных, вам придется преобразовать обе ваши серии в фреймы данных перед объединением.

     d_val.to_frame(name='d_vc').join(v_val.to_frame(name='v_vc'))
      
  2. Назначьте обе серии в качестве столбцов при инициализации фрейма данных:

     pd.DataFrame(dict(d_vc = d_val, v_vc = v_val)).reset_index()
      

Комментарии:

1. спасибо за ваш ответ — однако оба решения не работают. Однако я могу заставить их присоединиться reset_index перед слиянием, т.Е. pd.DataFrame(dict(d_vc = d_val.reset_index(), v_vc = v_val.reset_index()))