Добавить столбцы разной длины pandas

Вопрос:У меня проблема с добавлением столбцов в pandas. У меня DataFrame, размер nxk. И в процессе мне нужно добавить столбцы с размером mx1, где m = [1, n], но я не знаю m. Когда я попытаюсь сделать это: df['Name column'] = data # type(data) = list результат: AssertionError: Length of values does not match length

Вопрос:

У меня проблема с добавлением столбцов в pandas.
У меня DataFrame, размер nxk. И в процессе мне нужно добавить столбцы с размером mx1, где m = [1, n], но я не знаю m.

Когда я попытаюсь сделать это:

df[‘Name column’] = data # type(data) = list

результат:

AssertionError: Length of values does not match length of index

Можно ли добавить столбцы с разной длиной?

Лучший ответ:

Используйте concat и pass axis=1 и ignore_index=True:

In [38]: import numpy as np df = pd.DataFrame({‘a’:np.arange(5)}) df1 = pd.DataFrame({‘b’:np.arange(4)}) print(df1) df b 0 0 1 1 2 2 3 3 Out[38]: a 0 0 1 1 2 2 3 3 4 4 In [39]: pd.concat([df,df1], ignore_index=True, axis=1) Out[39]: 0 1 0 0 0 1 1 1 2 2 2 3 3 3 4 4 NaN Ответ №1

Если вы используете принятый ответ, вы потеряете имена столбцов, как показано в примере с принятым ответом и описано в документации (выделение добавлено):

Результирующая ось будет помечена 0,…, n – 1. Это полезно, если вы объединяете объекты, у которых ось конкатенации не имеет значимой индексной информации.

Похоже, имена столбцов (‘Name column’) имеют значение для оригинального постера/оригинального вопроса.

Чтобы сохранить имена столбцов, используйте pandas.concat, но не ignore_index (значение ignore_index по ignore_index равно false; поэтому вы можете вообще пропустить этот аргумент). Продолжайте использовать axis=1:

import pandas # Note these columns have 3 rows of values: original = pandas.DataFrame({ ‘Age’:[10, 12, 13], ‘Gender’:[‘M’,’F’,’F’]}) # Note this column has 4 rows of values: additional = pandas.DataFrame({ ‘Name’: [‘Nate A’, ‘Jessie A’, ‘Daniel H’, ‘John D’] }) new = pandas.concat([original, additional], axis=1) # Identical: # new = pandas.concat([original, additional], ignore_index=False, axis=1) print(new.head()) # Age Gender Name #0 10 M Nate A #1 12 F Jessie A #2 13 F Daniel H #3 NaN NaN John D

Обратите внимание, что у Джона Д. нет возраста или пола.

Ответ №2

Мы можем добавить другой размер значений списка в DataFrame.

пример

a = [0,1,2,3] b = [0,1,2,3,4,5,6,7,8,9] c = [0,1]

Найти длину всего списка

la,lb,lc = len(a),len(b),len(c) # now find the max max_len = max(la,lb,lc)

Изменить все в соответствии с определенной максимальной длиной (не в этом примере

if not max_len == la: a.extend([»]*(max_len-la)) if not max_len == lb: b.extend([»]*(max_len-lb)) if not max_len == lc: c.extend([»]*(max_len-lc))

Теперь весь список одинаковой длины и создайте фрейм данных

pd.DataFrame({‘A’:a,’B’:b,’C’:c})

Окончательный результат

A B C 0 1 0 1 1 2 1 2 3 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9

Оцените статью
Добавить комментарий