我从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()
指向某个起始行(在原始索引上)或正确切片并重置较小数据帧的索引,以便能够从新的“顶部”行开始,向下移动。
答案 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)