Заменить часть столбца в pd.dataframe для массива с другой длиной - PullRequest
3 голосов
/ 19 апреля 2019

Я хотел бы создать фрейм данных с несколькими столбцами разной длины, так как я думаю, что это невозможно с помощью pd.dataframe. Сначала я создаю фрейм данных только с нулями, а теперь я хотел бы заменить каждый столбец на массив, который Я хранил раньше (с разной длины). Я пробовал dataframe.replace и dataframe.update, но не смог получить эти результаты.

enter image description here

Тип и форма массивов: enter image description here

Ответы [ 2 ]

2 голосов
/ 19 апреля 2019

Вы должны вставить массив из индекса 1. Для этого вы можете сделать,

df['dobs'][1:] = dobs

Аналогично для всех массивов.

Рассмотрим примерный фрейм данных,

df = pd.DataFrame()

df['dobs'] = [0.] * 45
df['dpred_0'] = [0.] * 45
df['dpred'] = [0.] * 45
df['mrec'] = [0.] * 45

Теперь некоторые массивы заполнителей формы, которую вы упомянули в вопросе,

dobs = np.array([x for x in range(1, 45)])
dpred_0 = np.array([x for x in range(1, 45)])
dpred = np.array([x for x in range(1, 45)])
mrec = np.array([x for x in range(1, 46)])

Давайте проверим формы,

print(dobs.shape, dpred_0.shape, dpred.shape, mrec.shape, df.shape) # ((44,), (44,), (44,), (45,), (45, 4))

Чтобы заменить столбцы из индекса 1 для более коротких массивов, вы можете сделать это следующим образом:

df['dobs'][1:] = dobs
df['dpred_0'][1:] = dpred_0
df['dpred'][1:] = dpred
df['mrec'] = mrec # mrec is of shape (45, ) so no need to start from index 1

   dobs    dpred_0  dpred   mrec
0   0.0      0.0    0.0      1
1   1.0      1.0    1.0      2
2   2.0      2.0    2.0      3
3   3.0      3.0    3.0      4
4   4.0      4.0    4.0      5
1 голос
/ 19 апреля 2019

Вы можете добавить массив к фрейму данных, создав новый столбец и определив длину и положение:

random_array = range(0,12)
df['new_column'][0:12] = random_array
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...