Python 如何在大数据帧上成批循环

Python 如何在大数据帧上成批循环,python,pandas,Python,Pandas,我有一个大约150万行的相当大的数据帧,我正在尝试将下面的代码分为10000批执行。然后将结果附加到“数据集”数据框中。其中一个专栏“主题”的结构非常奇怪,所以我不得不清理它,但这需要很长时间来处理。这就是为什么我想使用k=10000批次。关于实现这一目标的最佳方式的想法 reuters_set = reuters_set.loc[reuters_set['subjects'].str.contains('P:')] reuters_set.shape[0] 1590478 reuters

我有一个大约150万行的相当大的数据帧,我正在尝试将下面的代码分为10000批执行。然后将结果附加到“数据集”数据框中。其中一个专栏“主题”的结构非常奇怪,所以我不得不清理它,但这需要很长时间来处理。这就是为什么我想使用k=10000批次。关于实现这一目标的最佳方式的想法

reuters_set = reuters_set.loc[reuters_set['subjects'].str.contains('P:')]

reuters_set.shape[0]

1590478

reuters_set.subjects.iloc[33] #Example of data in column that needs to be processed

['B:1092', 'B:12', 'B:19', 'B:20', 'B:22', 'B:227', 'B:228', 'B:229', 'B:24', 'G:1', 'G:6', 'G:B1', 'G:K', 'G:S', 'M:1QD', 'M:AV', 'M:B6', 'M:Z', 'R:600058.SS', 'N2:ASIA', 'N2:ASXPAC', 'N2:BMAT', 'N2:BMAT08', 'N2:CMPNY', 'N2:CN', 'N2:EASIA', 'N2:EMRG', 'N2:EQTY', 'N2:IRNST', 'N2:LEN', 'N2:MEMI', 'N2:METWHL', 'N2:MIN', 'N2:MINE', 'N2:MINE08', 'N2:MTAL', 'N2:MTAL08', 'N2:STEE', 'P:4295865030']

dataset = []

k = 10000
ct=0    

# Testing the first 10,000. It takes really long after this value...

bk = reuters_set.iloc[0:k]
bk.reset_index(inplace = True)
bk['id'] = np.arange(bk.shape[0])

bk['N2'] = ''
bk['P']  = ''
bk['R']  = ''

for index, row in bk.iterrows():
    a = [i.split(':') for i in ast.literal_eval(row['subjects'])]
    b = pd.DataFrame(a)
    b = b.groupby(0, as_index = False).agg({1:'unique'})
    dict_code = dict(zip(b[0], b[1]))
        if 'N2' in dict_code.keys():
            bk.loc[bk['id']== index, 'N2'] =  str(dict_code['N2'].tolist())
        if 'R' in dict_code.keys():
            bk.loc[bk['id']== index, 'R' ] =  str(dict_code['R'].tolist())
        if 'P' in dict_code.keys():
            bk.loc[bk['id']== index, 'P' ] =  str(dict_code['P'].tolist())

iterrows()
通常速度很慢,所以这肯定没什么帮助。这些操作不能矢量化吗?另外,请提供一份报告。为什么?当您无法将数据全部存储在内存中时,可以将数据分块处理。但是,如果您可以访问整个数据帧,那么您的目标应该是在整个数据帧上使用矢量化计算或优化方法。使用itertuples()-iterrows()在数据帧行上循环相当慢。考虑使用内置函数而不使用循环,或者使用NoMPY进行矢量化。<代码>迭代器()/< >通常是相当慢的,所以肯定不能帮助。这些操作不能矢量化吗?另外,请提供一份报告。为什么?当您无法将数据全部存储在内存中时,可以将数据分块处理。但是,如果您可以访问整个数据帧,那么您的目标应该是在整个数据帧上使用矢量化计算或优化方法。使用itertuples()-iterrows()在数据帧行上循环相当慢。考虑使用内置函数而不使用循环或使用NUMPY对其进行矢量化。