2016-01-28 49 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

相关问题