在切片/重置索引

时间:2015-12-22 04:22:59

标签: python pandas dataframe

我从CSV文件读入了几千行,其中包含用于计算不同输出的数据。我读了这个CSV文件并将输入存储在Pandas数据帧中。然后我使用itterrows()循环遍历数据帧。有时我的代码会失败,此时我希望在原始文件中读取,但在失败后在行中选择进程。因此,当发生这种情况时,请设置我的代码,以便在输入itterrows() for循环之前取消注释两行并将原始数据帧切割为大小:

# slicing it and re-indexing when a restart is needed
df_slice = df.iloc[1292:,]
for index,row in df_slice.iterrows():

但是,如果我如上所示切片原始数据帧,那么`itterrows()'循环中的索引值从1292开始,因此从较小的切片数据帧的顶部跳过1292个位置。我怎样才能从0/1开始?

我尝试重置索引:

# slicing it and re-indexing when a restart is needed
df_slice = df.iloc[1292:,]
df_slice.reset_index()

for index,row in df_slice.iterrows():

但这并没有改变一件事 - for index,row in df_slice.iterrows():中的索引仍然停留在1292,因此在切片索引上下降了1292个点。

那么,如何将iterrows()指向某个起始行(在原始索引上)或正确切片并重置较小数据帧的索引,以便能够从新的“顶部”行开始,向下移动。

2 个答案:

答案 0 :(得分:1)

您需要使用.ix而不是.iloc对数据框进行切片,如下所示:

df_slice = df.ix[1292:]

我遇到了类似的问题,我的困惑来自于在Pandas中有两种不同的方式来切割DataFrame。按标签(.ix)和整数位置(.iloc)。 df.itterows()会返回基于标签的索引,因此要从中断的地方继续,您需要使用.ix

答案 1 :(得分:0)

这里有同样的问题: df_slice.reset_index()不会重置df_slice上的索引,而是复制它的副本。使用drop,以便旧索引不会在df_slice中显示为列。

df_slice.reset_index(inplace=True,drop=True)