我正在处理内存中无法容纳的大文件,因此我正在使用Pandas数据框的迭代器功能,并且每次都处理单个块。
pd.read_csv(csv_file_name, encoding='utf-8', chunksize=chunk_size, iterator=True,
engine='c', error_bad_lines=False, low_memory=False)
在处理时,我想打印已处理的行数和已处理的行在总行数中的百分比。
要获取我正在使用的Pandas数据框中的总行数
len(df.index)
但是在尝试使用ierator时尝试使用它
AttributeError: 'TextFileReader' object has no attribute 'index'
有什么办法吗? (同时不遍历每个块)
答案 0 :(得分:0)
我会使用两种可能的解决方法:
使用columns
选项,仅读取一列即可读取文件。可能足够小,您可以一口气读取它,但如果不进行迭代,就可以计算行数。
使用linux命令wc -l
来计算行数。如果您有标题,则需要将其删除。
例如
wc_output = subprocess.run(['wc','-l', 'csv_file_name'])
# wc_output.stdout will be of format ` N_lines filename`
# subtract 1 to remove header
n_rows = int(wc_output.stdout.split()[0]) - 1