2017-09-06 78 views
1

這裏是我的代碼:Subseting在大塊的大熊貓

path = 'C:\\Users\\Daniil\\Desktop\\dw_payments' 
#list of all df: 
all_files = glob.glob(path + '/*.csv') 
all_payments_data = pd.DataFrame() 
dfs = [] 
for file in all_files: 
    df = pd.read_csv(file,index_col = None,chunksize = 200000) 
    df_f = df[df['CUSTOMER_NO'] == 20069675] 
    df_f = pd.concat(df_f,ignore_index = True) 
    dfs.append(df_f) 

all_payments_data = pd.concat(dfs) 

正如你在該行df_f = df[df['CUSTOMER_NO'] == 20069675]看,我想在一個塊來選擇特定的客戶,然後將其合併到空的數據幀。我想多次重複這個過程(有很多文件)。

但它引發我一個錯誤:

TypeError: 'TextFileReader' object is not subscriptable 

我怎樣才能解決這個問題?

+0

它是一個大的文件?如果不是,您可以省略塊大小。 –

+0

@cᴏʟᴅsᴘᴇᴇᴅ非常大。這就是問題 –

+1

啊,使用chunksize會產生'df'可迭代,而不是迭代器。在閱讀'df = pd.read_csv'後,試試'df_f = [x [x ['CUSTOMER_NO'] == 20069675] for df in'df]'? – Zero

回答

2

我想你需要迭代TextFileReader,過濾並追加到df_s。最後只有一次concat

通知 - 所有文件的結構必須相同(相同的順序相同的列名)

df_s = [] 
for file in all_files: 
    txt = pd.read_csv(file,index_col = None,chunksize = 200000) 
    for df in txt: 
     df_s.append(df[df['CUSTOMER_NO'] == 20069675]) 

df_f = pd.concat(df_s,ignore_index = True) 
+0

如果他們使用chunksize ...可能有一個原因,所以連接會導致內存錯誤。也許最好迭代塊並追加。 –

+0

問題出在內存錯誤。你認爲你的解決方案能解決這個問題嗎? –

+0

請檢查我的答案的最後一個版本。 – jezrael