在pandas datafram中插入一行

2024-04-27 04:23:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框:

s1 = pd.Series([5, 6, 7])
s2 = pd.Series([7, 8, 9])

df = pd.DataFrame([list(s1), list(s2)],  columns =  ["A", "B", "C"])

   A  B  C
0  5  6  7
1  7  8  9

[2 rows x 3 columns]

我需要加上第一行[2,3,4]得到:

   A  B  C
0  2  3  4
1  5  6  7
2  7  8  9

我试过append()concat()函数,但找不到正确的方法。

如何向数据框中添加/插入序列?


Tags: columns数据方法函数dataframedflistrows
3条回答

实现这一目标的一个方法是

>>> pd.DataFrame(np.array([[2, 3, 4]]), columns=['A', 'B', 'C']).append(df, ignore_index=True)
Out[330]: 
   A  B  C
0  2  3  4
1  5  6  7
2  7  8  9

通常,最容易附加数据帧,而不是序列。在您的例子中,因为您希望新行“在最上面”(以起始id为单位),并且没有函数pd.prepend(),所以我首先创建新的数据帧,然后附加旧的数据帧。

ignore_index将忽略数据帧中正在进行的旧索引,并确保第一行实际上以索引1开始,而不是以索引0重新启动。

典型免责声明:Cetero censeo。。。附加行是一个非常低效的操作。如果您关心性能,并且能够以某种方式确保首先创建一个具有正确(较长)索引的数据帧,然后将附加行插入到数据帧中,那么您肯定应该这样做。见:

>>> index = np.array([0, 1, 2])
>>> df2 = pd.DataFrame(columns=['A', 'B', 'C'], index=index)
>>> df2.loc[0:1] = [list(s1), list(s2)]
>>> df2
Out[336]: 
     A    B    C
0    5    6    7
1    7    8    9
2  NaN  NaN  NaN
>>> df2 = pd.DataFrame(columns=['A', 'B', 'C'], index=index)
>>> df2.loc[1:] = [list(s1), list(s2)]

到目前为止,我们已经得到了您所拥有的df

>>> df2
Out[339]: 
     A    B    C
0  NaN  NaN  NaN
1    5    6    7
2    7    8    9

但是现在可以很容易地插入行,如下所示。由于空间是预先分配的,因此效率更高。

>>> df2.loc[0] = np.array([2, 3, 4])
>>> df2
Out[341]: 
   A  B  C
0  2  3  4
1  5  6  7
2  7  8  9

只需使用loc将行分配给特定索引:

 df.loc[-1] = [2, 3, 4]  # adding a row
 df.index = df.index + 1  # shifting index
 df = df.sort_index()  # sorting by index

你会得到你想要的:

    A  B  C
 0  2  3  4
 1  5  6  7
 2  7  8  9

请参阅Pandas文档中的Indexing: Setting with enlargement

不确定您是如何调用concat()的,但只要两个对象属于同一类型,它就应该可以工作。也许问题是你需要把你的第二个向量转换成一个数据帧?使用您为我定义的df,可以执行以下操作:

df2 = pd.DataFrame([[2,3,4]], columns=['A','B','C'])
pd.concat([df2, df])

相关问题 更多 >