在循环中增加行索引,直到处理数据帧中的所有行 - 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的主要内容,如果未能解决你的问题,请参考以下文章

附加到数据帧中特定值的 for 循环中的向量

如何使用实际数据帧中两列中的值索引另一个数据帧,从而在实际数据框中创建列

熊猫对多个数据框求和

合并两个不同长度的python pandas数据帧,但将所有行保留在输出数据帧中

使用行名,列名和最大列值创建数据框

从熊猫数据框中选择特定行