在循环中增加行索引,直到处理数据帧中的所有行 - python
Posted
技术标签:
【中文标题】在循环中增加行索引,直到处理数据帧中的所有行 - python【英文标题】:Increment row index in loop until all rows in a dataframe is processed - python 【发布时间】:2021-01-11 02:31:51 【问题描述】:我一次从数据框中读取几行,以处理大约 130 万行进行文本分类。我正在手动更新应该使用 df.iloc[from_row:to_row]
读取和处理的行数我将 Colab 用于当前活动。我有单独的代码块,我将它们用作流来最终下载切片行的分类数据帧。
希望在每次递增后下载已处理的数据帧后自动将 from_row:to_row 数字递增 100 或 500 或 1000,直到处理完最后一行
temp = temp.iloc[100:201] ##Manually updating this part and running rest of the code
test=[]
**# classifiying sentences in text column**
for row in tqdm(temp['comments'].values):
res = label_classify(row)
test.append(res)
temp['test'] = test
**# mapping right labels to appropriate rows**
list_of_rows = temp.test.to_list()
th = 0.4 #whatever threshold value you want
result = list(map(lambda x: get_label_score_dict(x, th), list_of_rows))
result_df = pd.DataFrame(result)
**## concatenating labeled df to original df and downloading (to avoid losing processed data incase Colab reconnects or I lose the session)**
*# Merging dfs*
temp.reset_index(drop=True, inplace=True)
concatenated_df_new = pd.concat( [temp, result_df], axis=1)
merge_df = pd.DataFrame()
merge_df = pd.concat([merge_df,concatenated_df_new], axis=0, ignore_index=True)
**# downloading final dataframe**
from google.colab import files
merge_df.to_csv('merge_nps.csv')
files.download('merge_nps.csv')
可能有一种完全不同的方式来做到这一点。我在 python 中编码的时间很短。
任何关于如何将其编写为函数或如何增加计数器 (df.iloc[from_row:to_row]) 的帮助或想法都会有所帮助。
【问题讨论】:
我不明白你为什么不能放df.iloc[:]
...?
@N.JonasFigge 你能详细说明一下吗?不明白你的建议
通常情况下,你可以使用:
来获取所有元素-我不明白为什么你必须连续这样做......
@N.JonasFigge 我必须处理 130 万行,使用 .apply(lambda row: label_classify(row)) 方法在 Colab 中处理所有行的估计时间约为 17 小时。因此,我尝试为每次迭代下载处理后的输出,以避免在会话关闭时丢失处理后的数据。
【参考方案1】:
如果你想做某种批处理,你可以这样做:
import numpy as np
batch_size = 1024 # or whatever you want the batch size to be
num_samples = 1.3e6 # or whatever the exact value is
num_batches = int(np.ceil(num_samples / batch_size))
for i in range(num_batches):
temp = temp.iloc[i*batch_size : (i+1)*batch_size]
#... rest of the code
未经测试,但你明白了。
【讨论】:
以上是关于在循环中增加行索引,直到处理数据帧中的所有行 - python的主要内容,如果未能解决你的问题,请参考以下文章
如何使用实际数据帧中两列中的值索引另一个数据帧,从而在实际数据框中创建列