Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Иногда проще добавить все за пределы панд, а затем просто создать 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

Здесь простое и немое решение:

>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df = df.append({'foo':1, 'bar':2}, ignore_index=True)

Ответ 3

df = pd.DataFrame(columns=list("ABC"))
df.loc[len(df)] = [1,2,3]

Ответ 4

Не могли бы вы сделать что-то вроде этого?

>>> 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

Есть ли у кого-нибудь более элегантное решение?

Ответ 5

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

>>> 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

Ответ 6

Если вы хотите добавить серию и использовать индекс Series в качестве столбцов 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 вы не получите правильный индекс.

Ответ 7

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

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

Ответ 8

просто используйте 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

Ответ 9

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

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

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

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