Добавление списка или серии в pandas DataFrame в виде строки?

111

Итак, я инициализировал пустой DataFrame pandas и хотел бы итеративно добавлять списки (или серии) в виде строк в этом DataFrame. Как лучше всего это сделать?

Уэс Филд
источник
Лучшие ответы можно найти по
Юваль Ацмон,

Ответы:

136

Иногда проще выполнить все добавления за пределами pandas, тогда просто создайте DataFrame за один раз.

>>> import pandas as pd
>>> simple_list=[['a','b']]
>>> simple_list.append(['e','f'])
>>> df=pd.DataFrame(simple_list,columns=['col1','col2'])
   col1 col2
0    a    b
1    e    f
Майк Чирико
источник
2
Вопрос, похоже, подразумевает, что не все строки известны заранее.
DISC-O
107
df = pd.DataFrame(columns=list("ABC"))
df.loc[len(df)] = [1,2,3]
Ашот Матевосян
источник
9
Это самый простой способ, если вы хотите добавить в конец файла df.
Сид
3
Это именно то, что я хотел, такое простое, но эффективное!
MSalty
3
Почему это не выбранный ответ?
Лукас Азеведо
1
В целом это нормально, но работает только в том случае, если у вас есть монотонно увеличивающийся индекс,
начинающийся с
61

Вот простое и глупое решение:

>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df = df.append({'foo':1, 'bar':2}, ignore_index=True)
Джайдев Дешпанде
источник
27
Обратите внимание, что это добавление диктовки, а не списка
anthnyprschka
37

Вы могли бы сделать что-нибудь подобное?

>>> import pandas as pd
>>> df = pd.DataFrame(columns=['col1', 'col2'])
>>> df = df.append(pd.Series(['a', 'b'], index=['col1','col2']), ignore_index=True)
>>> df = df.append(pd.Series(['d', 'e'], index=['col1','col2']), ignore_index=True) 
>>> df
  col1 col2
0    a    b
1    d    e

Есть ли у кого-нибудь более изящное решение?

Алекс Вулфорд
источник
1
Вот более простое и глупое решение: `` import pandas as pd df = pd.DataFrame () df = df.append ({'foo': 1, 'bar': 2}, ignore_index = True) # Обратите внимание, что это добавление не бывает на месте. ``
Джайдев Дешпанде
27

Следуя ответу Майка Чирико ... если вы хотите добавить список после того, как фрейм данных уже заполнен ...

>>> list = [['f','g']]
>>> df = df.append(pd.DataFrame(list, columns=['col1','col2']),ignore_index=True)
>>> df
  col1 col2
0    a    b
1    d    e
2    f    g
Джей Марм
источник
Создает ли копию? Можно ли добавить на месте?
lucid_dreamer
4

Если вы хотите добавить серию и использовать индекс серии в качестве столбцов DataFrame, вам нужно только добавить серию в скобки:

In [1]: import pandas as pd

In [2]: df = pd.DataFrame()

In [3]: row=pd.Series([1,2,3],["A","B","C"])

In [4]: row
Out[4]: 
A    1
B    2
C    3
dtype: int64

In [5]: df.append([row],ignore_index=True)
Out[5]: 
   A  B  C
0  1  2  3

[1 rows x 3 columns]

Без него ignore_index=Trueвы не получите правильный индекс.

бмелло
источник
4

Вот функция, которая, учитывая уже созданный фрейм данных, добавит список как новую строку. Вероятно, здесь должны быть добавлены ловушки ошибок, но если вы точно знаете, что добавляете, это не должно быть проблемой.

import pandas as pd
import numpy as np

def addRow(df,ls):
    """
    Given a dataframe and a list, append the list as a new row to the dataframe.

    :param df: <DataFrame> The original dataframe
    :param ls: <list> The new row to be added
    :return: <DataFrame> The dataframe with the newly appended row
    """

    numEl = len(ls)

    newRow = pd.DataFrame(np.array(ls).reshape(1,numEl), columns = list(df.columns))

    df = df.append(newRow, ignore_index=True)

    return df
jadki
источник
3

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

import pandas as pd
mylist = [1,2,3]
df = pd.DataFrame()
df = df.append(pd.DataFrame(data[mylist]))
Янфеликс
источник
2

просто используйте loc:

>>> df
     A  B  C
one  1  2  3
>>> df.loc["two"] = [4,5,6]
>>> df
     A  B  C
one  1  2  3
two  4  5  6
Циньси
источник
1

Как уже упоминалось здесь - https://kite.com/python/answers/how-to-append-a-list-as-a-row-to-a-pandas-dataframe-in-python , вам нужно сначала преобразуйте список в серию, затем добавьте серию в фрейм данных.

df = pd.DataFrame([[1, 2], [3, 4]], columns = ["a", "b"])
to_append = [5, 6]
a_series = pd.Series(to_append, index = df.columns)
df = df.append(a_series, ignore_index=True)
Абхишек Пуджари
источник
0

Самый простой способ:

my_list = [1,2,3,4,5]
df['new_column'] = pd.Series(my_list).values

Редактировать:

Не забывайте, что длина нового списка должна быть такой же, как у соответствующего Dataframe.

Ганем
источник