Итак, я инициализировал пустой DataFrame pandas и хотел бы итеративно добавлять списки (или серии) в виде строк в этом DataFrame. Как лучше всего это сделать?
Ответы:
Иногда проще выполнить все добавления за пределами 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
df = pd.DataFrame(columns=list("ABC"))
df.loc[len(df)] = [1,2,3]
df
.
Вот простое и глупое решение:
>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df = df.append({'foo':1, 'bar':2}, ignore_index=True)
Вы могли бы сделать что-нибудь подобное?
>>> 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
Есть ли у кого-нибудь более изящное решение?
Следуя ответу Майка Чирико ... если вы хотите добавить список после того, как фрейм данных уже заполнен ...
>>> 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
Если вы хотите добавить серию и использовать индекс серии в качестве столбцов 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
вы не получите правильный индекс.
Вот функция, которая, учитывая уже созданный фрейм данных, добавит список как новую строку. Вероятно, здесь должны быть добавлены ловушки ошибок, но если вы точно знаете, что добавляете, это не должно быть проблемой.
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
Как уже упоминалось здесь - 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)