说我的内存中有一个大文件,该文件是用chunksize
加载到熊猫中的。现在,我必须将每个值与其相邻的值进行比较。我的问题是,我似乎无法同时选择两个不同块的极值(在第一个和最后一个位置)。
示例:
print(df)
a
0 102
1 101
2 104
3 110
4 104
5 105
count = 0
for i in range(len(df)-1):
if df.iloc[i+1]['a']>df.iloc[i]['a']:
count+=1
在此示例中, count
等于3
。但是,假设我从df
的{{1}}加载了.csv
,考虑到值将位于不同的块中,我将如何获得类似的结果?实际上,chunksize=1
是chunksize
,因此问题将仅限于每个块的第一个和最后一个值。
答案 0 :(得分:0)
编辑:
这是一个示例,其中我存储last_chunk_value
以在运行下一个循环时更新值。
我已经测试了一种“强力”方法与“块脚本”进行比较。两种方法的结果相同。
顺便说一下,我简化了“强力”方法。
import pandas as pd
import numpy as np
import random
# 'data' generation as csv file
file = open("data.csv", 'w')
file.write('rand_int' + '\n')
for i in range(0, 10000):
file.write(str(random.randint(80,120)) + '\n')
file.close()
# "brute force method"
df = pd.read_csv("data.csv")
length = int( (df.shift(-1) - df > 0).sum() )
print('number=', length)
# chunksize method
chunksize = 33
length = 0
last_chunk_value = np.nan
for chunk in pd.read_csv("data.csv", chunksize=chunksize):
chunk['shift'] = chunk.shift(1)
chunk.iloc[0, 1] = last_chunk_value
length += (chunk['rand_int'] - chunk['shift'] > 0).sum()
last_chunk_value = chunk.iloc[-1, 0]
print('number=', length)