Python 我想从TextFileReader中删除重复项,并将剩余内容保存到单独的文件中
所以,我在大熊猫的TextFileReader对象中对块进行迭代,对于每个块,我都会删除\u重复项,然后保存到\u csv。不幸的是,当我尝试将所有内容保存在一个文件中时,它在文件达到4GB后崩溃。我假设我必须创建几个较小的csv,其大小不会超过4GB 现在我在更小的文件(300行)和更小的块上测试我的代码,但问题是它要么每个文件放一个块,如果Python 我想从TextFileReader中删除重复项,并将剩余内容保存到单独的文件中,python,pandas,Python,Pandas,所以,我在大熊猫的TextFileReader对象中对块进行迭代,对于每个块,我都会删除\u重复项,然后保存到\u csv。不幸的是,当我尝试将所有内容保存在一个文件中时,它在文件达到4GB后崩溃。我假设我必须创建几个较小的csv,其大小不会超过4GB 现在我在更小的文件(300行)和更小的块上测试我的代码,但问题是它要么每个文件放一个块,如果 if int(os.stat(ostatni_plik).st_size) < 'approx. size of a chunk': if in
if int(os.stat(ostatni_plik).st_size) < 'approx. size of a chunk':
if int(os.stat(ostatni\u plik).st\u size)<'a chunk的近似大小':
或者它只返回一个空文件,如果
if int(os.stat(ostatni_plik).st_size) < 'much bigger or much smaller than a chunk':
if int(os.stat(ostatni\u plik).st\u size)<'比块大得多或小得多':
我的代码:
tp1 = pd.read_csv('C:\test\\test.csv',chunksize=50,iterator=True)
a = 0
f = open(path2%str(a),'ab+')
last_file = path2%str(a)
for chunk in tp1:
if int(os.stat(last_file).st_size) < 50:
chunk.drop_duplicates(inplace=False,subset='kol2')
chunk.to_csv(last_file,mode='ab+')
else:
a += 1
last_file = path2%str(a)
chunk.drop_duplicates(inplace=False,subset='kol2')
chunk.to_csv(last_file,mode='ab+')
tp1=pd.read\u csv('C:\test\\test.csv',chunksize=50,iterator=True)
a=0
f=打开(路径2%str(a),“ab+”)
最后一个文件=路径2%str(a)
对于tp1中的块:
如果int(os.stat(最后一个文件).st_大小)<50:
chunk.drop\u重复项(inplace=False,subset=kol2')
chunk.to_csv(最后一个_文件,mode='ab+'))
其他:
a+=1
最后一个文件=路径2%str(a)
chunk.drop\u重复项(inplace=False,subset=kol2')
chunk.to_csv(最后一个_文件,mode='ab+'))
我不知道发生了什么事
谢谢你的回复 这对我很有用
初始化“test.csv”
处理1个文件
验证
单独文件的处理
df = pd.DataFrame(np.random.choice((1, 0), (200, 2)), columns=list('ab'))
df.insert(0, 'label', np.random.choice(list('ABCDE'), 200))
df.to_csv('test.csv', index=None)
# Initialize 'output.csv' with just the header
df.iloc[:0].to_csv('output.csv', index=None)
# wrap key word args together for cleanliness
output_kwds = dict(index=None, mode='a', header=None)
chunker = pd.read_csv('test.csv', chunksize=10, iterator=True)
for chunk in chunker:
chunk.drop_duplicates(subset='label').to_csv('output.csv', **output_kwds)
df_ = pd.read_csv('output.csv')
df_.label.describe()
count 90
unique 5
top D
freq 20
Name: label, dtype: object
# wrap key word args together for cleanliness
output_kwds = dict(index=None, mode='a')
chunker = pd.read_csv('test.csv', chunksize=10, iterator=True)
for i, chunk in enumerate(chunker):
chunk.drop_duplicates(subset='label').to_csv('output%s.csv' % i, **output_kwds)