在Pandas DataFrame中按索引顺序添加行

0 投票
1 回答
2347 浏览
提问于 2025-04-18 09:57

我有一个 DataFrame,我想往里面添加一些不存在的行。我发现了 .loc 这个方法,但它是把值加到最后面,而不是按顺序放的。例如:

import numpy as np
import pandas as pd

dfi = pd.DataFrame(np.arange(6).reshape(3,2),columns=['A','B'])

>>> dfi
    A B
0   0 1
1   2 3
2   4 5
[3 rows x 2 columns]

通过 .loc 添加一行:

dfi.loc[5,:] = 0
>>> dfi
    A B
0   0 1
1   2 3
2   4 5
5   0 0
[3 rows x 2 columns]

到目前为止一切都好。但是当我尝试添加另一行,索引比最后一个小的时候,就会出现这样的情况:

dfi.loc[3,:] = 0
>>> dfi
    A B
0   0 1
1   2 3
2   4 5
5   0 0
3   0 0
[3 rows x 2 columns]

我希望能把索引为 3 的行放在索引为 25 的行之间。我可以每次都对 DataFrame 按索引排序,但那样会花很多时间。有没有其他方法呢?

我实际的问题是考虑一个 DataFrame,它的索引是 datetime 对象。我没有把这个实现的全部细节放在这里,因为那样会让我的真实问题变得复杂:在 DataFrame 中添加行,使得结果的索引是有序的。

1 个回答

1

如果你的索引几乎是连续的,只是偶尔缺少一些值。那么我觉得你可以试试下面的方法,

In [15]:

df=pd.DataFrame(np.zeros((100,2)), columns=['A', 'B'])
df['A']=np.nan
df['B']=np.nan
In [16]:

df.iloc[[0,1,2]]=pd.DataFrame({'A': [0,2,4,], 'B': [1,3,5]})
df.iloc[5]=[0,0]
df.iloc[3]=0
print df.dropna()
   A  B
0  0  1
1  2  3
2  4  5
3  0  0
5  0  0

[5 rows x 2 columns]

撰写回答