2016-01-28 48 views
0

到目前爲止,我有一個以文件名的相同部分開頭的文件列表,所以我想通配符並獲取目錄中所有文件名的列表從文件名的相同部分開始,然後將所有文件附加在一起,以便它只是一個大文件。我知道我需要導入glob。所以這是我迄今爲止所擁有的。循環播放文件名列表並將它們附加在Python中

import glob 

filename = glob.glob('1511**.mnd') 
data_nov15_hereford = pd.DataFrame() 
list = [] 

for i in filename: 
    f_nov15_hereford = pd.read_csv(i, skiprows = 33, sep='\s+',chunksize=30) 
    list.append(f_nov15_hereford) 
    data_nov15_hereford = pd.concat(list) 
    data_nov15_hereford = data_nov15_hereford.convert_objects(convert_numeric=True) 

有沒有一個更容易或更好的方法來做到這一點,實際工作。 謝謝!

回答

3
import glob 

filename = glob.glob('1511**.mnd') 
data_nov15_hereford = pd.DataFrame() 
frames = [] 

for i in filename: 
    f_nov15_hereford = pd.read_csv(i, skiprows = 33, sep='\s+') 
    frames.append(f_nov15_hereford) 
data_nov15_hereford = pd.concat(frames) 
data_nov15_hereford = data_nov15_hereford.convert_objects(convert_numeric=True) 
# save to csv 
data_nov15_hereford.to_csv(filename) 

  • 不要叫pd.concat()for-loop內。這樣做主要是無用功,因爲

    data_nov15_hereford = pd.concat(list) 
    

    分配在每個循環迭代一個新的價值data_nov15_hereford

  • 避免命名變量list,因爲list是一個內置的Python類。分配一個特定的列表list可能引起奇怪的,難以發現的錯誤後來在像x = list(...)看似平淡無奇的代碼(這將提高TypeError: 'list' object not callable錯誤。)

+0

感謝您的幫助。我現在得到一個錯誤:TypeError:不能連接非NDFrame對象 – HM14

+0

我的錯誤。當你使用'chunksize = 30'時,'pd.read_csv'返回一個產生DataFrame的迭代器,而不是DataFrame本身。由於'pd.concat'需要一個DataFrames列表,'chunksize = 30'應該被移除。 – unutbu

+0

好吧,這是有道理的。我想問題是我想保持chunksize = 30,因爲對於每個我正在循環的文件,我希望它每隔30行對每一個文件進行分塊(因爲原始數據看起來像標頭等),所以如果我得到擺脫它不會很好地閱讀。那有意義嗎? – HM14

相關問題