计算块的数量

the*_*eau 5 python chunks dataframe pandas

我正在使用chuncksize(pandas DataFrame)读取一个大的csv文件,就像这样

reader = pd.read_csv('log_file.csv', low_memory = False, chunksize = 4e7)
Run Code Online (Sandbox Code Playgroud)

我知道我可以只计算它在文件中读取的块数,但我想自动执行此操作并将块数保存到变量中,就像这样(以伪代码)

number_of_chuncks = countChuncks(reader)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Ama*_*dor 0

您可以使用生成器表达式来迭代 reader(定义 chunksize 时由 read_csv 返回的 TextFileReader),并为每次迭代求和 1:

number_of_chunks = sum(1 for chunk in reader)
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用生成器表达式来计算文件中的行数(与第一个选项的逻辑类似,但迭代文件的行),然后将该数字除以块大小并将结果四舍五入(使用数学.ceil)

import math
number_of_rows = sum(1 for row in open('log_file.csv', 'r'))
number_of_chunks = math.ceil(number_of_rows/chunksize)
Run Code Online (Sandbox Code Playgroud)

或者

import math
number_of_chunks = math.ceil(sum(1 for row in open('log_file.csv', 'r'))/chunksize)
Run Code Online (Sandbox Code Playgroud)

在我的测试中,第二个解决方案显示出比第一个解决方案更好的性能。