[英]How to slice a pandas data frame based on a conditional if statement using df.iterrows and create new dataframe
[英]Problems using iterrows() with Pandas DF after slice/reset index
我從CSV文件讀取了幾千行,其中包含用於計算不同輸出的數據。 我讀了這個CSV文件,並將輸入存儲在Pandas數據框中。 然后,我使用itterrows()
遍歷數據幀。 有時我的代碼會失敗,這時我希望讀取原始文件,但是在失敗后的行繼續進行處理。 因此,當發生這種情況時,請設置我的代碼,以便取消注釋兩行,並在進入itterrows()
進行循環之前將原始數據幀切成itterrows()
大小:
# 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():
索引中的for index,row in df_slice.iterrows():
仍然停留在1292,因此在切片索引上跳了1292點。
因此,如何將iterrows()
到某個起始行(在原始索引上)或適當地切片並重置較小數據幀的索引,以能夠從新的“頂部”行開始並向下移動。
您需要使用.ix
而不是.iloc
對DataFrame進行切片,如下所示:
df_slice = df.ix[1292:]
我只是有一個類似的問題,我的困惑來自於以下事實:在Pandas中切片DataFrame有兩種不同的方式。 按標簽( .ix
)和整數位置( .iloc
)。 df.itterows()
返回基於標簽的索引,因此.ix
來的地方繼續使用.ix
這里也有同樣的問題:df_slice.reset_index()不會重置df_slice上的索引,而是重置它的副本上的索引。 使用drop,使舊索引不會在df_slice中顯示為列。
df_slice.reset_index(inplace=True,drop=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.