Итак, я инициализировал пустой pandas DataFrame, и я хотел бы итеративно добавлять списки (или Series) в виде строк в этом DataFrame. Каков наилучший способ сделать это?
Добавление списка или серии в pandas DataFrame в виде строки?
Ответ 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.