我想从TextFileReader中删除drop_duplicates并将剩余的内容保存到单独的文件中

时间:2016-08-23 18:17:52

标签: python pandas

所以,我在庞大的pandas的TextFileReader对象中迭代块,对于每个chunk,我做drop_duplicates,然后是to_csv。不幸的是,当我尝试将所有内容保存在一个文件中时,它在文件达到4GB后崩溃了。我假设我必须创建几个较小的csv,不超过4GB。

现在我在较小的文件(300行)和较小的块上测试我的代码,但问题是它要么为每个文件放一个块,如果

if int(os.stat(ostatni_plik).st_size) < 'approx. size of a chunk':

或者只返回一个空文件,如果

if int(os.stat(ostatni_plik).st_size) < 'much bigger or much smaller than a chunk':

我的代码:

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+')

我不知道发生了什么。

感谢您的回复!

1 个答案:

答案 0 :(得分:0)

这适合我。

初始化cudaconfig = {'home':home, 'nvcc':nvcc, 'include': pjoin(home, 'include'), 'lib64': pjoin(home, 'lib')}

'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