在Pandas DataFrame中按索引顺序添加行
我有一个 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
的行放在索引为 2
和 5
的行之间。我可以每次都对 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]