我收到错误' TypeError:' TextFileReader'对象不支持项目分配'当我尝试在块中添加列和修改标题名称等时。
我的问题是我使用慢速工作笔记本电脑处理一个相当大的文件(1000万行)。我想添加一些简单的列(1或0值),连接两列来创建一个唯一的ID,更改其他列的dtype,并重命名一些标题,以便它们与我稍后将会出现的其他文件匹配。我可以拆分这个csv(可能选择日期范围并制作单独的文件),但我想学习如何使用chunksize或处理大文件,而不会遇到内存问题。是否可以在块中修改文件,然后将它们连接在一起?
我正在进行原始数据清理,然后将其加载到Tableau中进行可视化。
示例(读取/修改1000万行):
> rep = pd.read_csv(r'C:\repeats.csv.gz',
> compression = 'gzip', parse_dates = True , usecols =
> ['etc','stuff','others','...'])
> rep.sort()
> rep['Total_Repeats'] = 1
> rep.rename(columns={'X':'Y'}, inplace = True)
> rep.rename(columns={'Z':'A'}, inplace = True)
> rep.rename(columns={'B':'C'}, inplace = True)
> rep['D']= rep['E'] + rep['C']
> rep.rename(columns={'L':'M'}, inplace = True)
> rep.rename(columns={'N':'O'}, inplace = True)
> rep.rename(columns={'S':'T'}, inplace = True)
答案 0 :(得分:0)
只要在查看大文件时忽略.read()部分,Python通常就会很好。
如果你只是使用迭代器,你应该没问题:
with open('mybiginputfile.txt', 'rt') as in_file:
with open('mybigoutputfile.txt', 'wt') as out_file:
for row in in_file:
'do something'
out_file.write(row)
知道更多内容的人会解释它的内存方面是如何工作的,但这对我来说非常适合多GB文件而不会崩溃Python。
您可能希望将数据放入正确的数据库中,然后再杀死笔记本电脑,同时提供数据并运行Tableau!
答案 1 :(得分:0)
如果将chunk_size
关键字传递给pd.read_csv,则返回csv reader的迭代器。并且您可以在追加模式下使用to_csv
方法编写已处理的块。您将能够处理大型文件,但无法对数据帧进行排序。
import pandas as pd
reader = pd.read_csv(r'C:\repeats.csv.gz',
compression = 'gzip', parse_dates=True, chunk_size=10000
usecols = ['etc','stuff','others','...'])
output_path = 'output.csv'
for chunk_df in reader:
chunk_result = do_somthing_with(chunk_df)
chunk_result.to_csv(output_path, mode='a', header=False)