将列表或序列作为行追加到熊猫 DataFrame?

因此,我已经初始化了一个空的熊猫数据框架,并且我想在这个数据框架中以行的形式迭代地附加列表(或系列)。做这件事的最好方法是什么?

461266 次浏览

你能做这样的事吗?

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

还有更好的解决办法吗?

这里有一个简单而愚蠢的解决方案:

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

有时,在大熊猫之外执行所有附加操作会更容易,那么,只需一次创建 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

按照 Mike Chirico 的回答... 如果你想附加一个列表 之后数据帧已经被填充..。

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

如果要添加 Series 并使用 Series 的索引作为 DataFrame 的列,只需在括号之间追加 Series:

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你就得不到正确的索引。

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

这里有一个函数,给定一个已经创建的数据框,它将作为一个新行追加一个列表。这可能需要引入错误捕捉器,但是如果您确切地知道要添加什么,那么就不会有问题。

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

只需使用 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

最简单的方法:

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

编辑:

不要忘记,新列表的长度应该与对应的数据框相同。

在 append 函数中将列表转换为数据框架也可以工作,在循环中也是如此

import pandas as pd
mylist = [1,2,3]
df = pd.DataFrame()
df = df.append(pd.DataFrame(data[mylist]))

正如这里提到的-https://kite.com/python/answers/how-to-append-a-list-as-a-row-to-a-pandas-dataframe-in-python,您需要首先将列表转换为一个序列,然后将该序列附加到 dataframe。

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)

在 Python 中,有几种方法可以将列表附加到熊猫数据框中。让我们考虑以下数据框架和列表:

import pandas as pd
# Dataframe
df = pd.DataFrame([[1, 2], [3, 4]], columns = ["col1", "col2"])
# List to append
list = [5, 6]

选项1: 使用 pandas.DataFrame.loc在数据框的末尾附加列表。

df.loc[len(df)] = list

选项2: 将列表转换为 dataframe 并附加 pandas.DataFrame.append()

df = df.append(pd.DataFrame([list], columns=df.columns), ignore_index=True)

选项3: 将列表转换为级数并附加 pandas.DataFrame.append()

df = df.append(pd.Series(list, index = df.columns), ignore_index=True)

上面的每个选项都应该输出如下内容:

>>> print (df)
col1  col2
0     1     2
1     3     4
2     5     6

参考资料: 如何在 Python 中将列表作为行追加到熊猫数据框架?

考虑一个 N x 2维的数组 A。

A.loc[A.shape[0]] = [3,4]