Добавление списка или серии в 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

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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.