2016-09-21 180 views
1

csv文件的方式很大,所以我正在按塊讀取它。 因此,我使用chunksize的read_csv。Python Pandas:在文件中寫入某些行

我想要存儲所有的行,其中最後一個條目的值爲1的文件和所有其他最後一個條目在另一個文件中的值爲0的行。

假設它看起來像這樣:

ID A B C 
0 0.0 0.1 1 
1 0.1 0.2 0 
2 0.1 0.0 1 

所以,我想存儲與ID爲0,並在一個文件中2,並在另一個文件ID 1行row。

我該如何做到這一點與熊貓?

回答

2

this後:

reader = pd.read_csv('big_table.txt', sep='\t', header=0, 
        index_col=0, usecols=the_columns_i_want_to_use, 
        chunksize=10000) 

df = pd.concat([ chunk.ix[rows_that_I_want_] for chunk in reader ]) 

但反而讓2個數據幀:

df0 = pd.concat([ chunk[chunk["C"] == 0] for chunk in reader ]) 
df1 = pd.concat([ chunk[chunk["C"] == 1] for chunk in reader ]) 

然後保存每個數據幀獨立

+0

但我讀塊大塊和根據文檔我得到一個TextFileReader對象,而不是一個數據幀 – tumbler

+0

更新它考慮塊大小。 TextFileReader對象是一個生成器,因此您需要遍歷它。您可以使用列表理解來製作一組較小的數據框,然後將它們連接在一起。 – Kyrubas

+0

你是什麼意思的發電機? – tumbler

0

我只想做這樣的:

first = True 
df = pd.read_csv('file.csv', chunksize=1e5) 
for chunk in df: 
    if first: 
     chunk[chunk['C'] == 1].to_csv('ones.csv', header=True) 
     chunk[chunk['C'] == 0].to_csv('zero.csv', header=True) 
     first = False 
    chunk[chunk['C'] == 1].to_csv('ones.csv', header=False) 
    chunk[chunk['C'] == 0].to_csv('zero.csv', header=False)