#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)
Некоторые другие альтернативы:
-
Используйте
join
вместоconcat
. Но посколькуjoin
их можно использовать только для фреймов данных, вам придется преобразовать обе ваши серии в фреймы данных перед объединением.d_val.to_frame(name='d_vc').join(v_val.to_frame(name='v_vc'))
-
Назначьте обе серии в качестве столбцов при инициализации фрейма данных:
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()))