如何在python中的列表中的几个数据帧上迭代循环

时间:2015-03-20 06:52:32

标签: python-2.7 loops csv pandas dataframe

我是编程新手并且正在使用Python。对于工作项目,我试图读取几个.csv文件,将它们转换为数据框,将一些字段连接成一个列标题,然后将所有数据框附加到一个大的DataFrame中。我在StackOverflow以及其他资源中进行了大量搜索,但我找不到答案。这是我到目前为止的代码以及一些缩写输出:

import pandas as pd
import glob 

# Read a directory of files to a list
csvlist = []
for f in glob.glob("AssayCerts/*"):
    csvlist.append(f)

csvlist  
['AssayCerts/CH09051590.csv', 'AssayCerts/CH09051591.csv', 'AssayCerts/CH14158806.csv', 'AssayCerts/CH14162453.csv', 'AssayCerts/CH14186004.csv']

# Read .csv files and convert to DataFrames
dflist = []
for csv in csvlist:
    df = pd.read_csv(filename, header = None, skiprows = 7)
    dflist.append(df)

dflist  
[                  0        1         2         3         4         5     \  
0                NaN  Au-AA23  ME-ICP41  ME-ICP41  ME-ICP41  ME-ICP41       
1             SAMPLE       Au        Ag        Al        As         B       
2        DESCRIPTION      ppm       ppm         %       ppm       ppm      

#concatenates the cells in the first three rows of the last dataframe; need to apply this to all of the dataframes.
for df in dflist:
    column_names = df.apply(lambda x: str(x[1]) + '-'+str(x[2])+' - '+str(x[0]),axis=0)

column_names  
0     SAMPLE-DESCRIPTION - nan  
1             Au-ppm - Au-AA23  
2            Ag-ppm - ME-ICP41  
3              Al-% - ME-ICP41  

我无法在所有DataFrame中应用最后一个操作。我似乎只能将它应用于列表中的最后一个DataFrame。一旦我越过这一点,我将必须附加所有DataFrame以形成一个大型DataFrame。

1 个答案:

答案 0 :(得分:1)

正如Andy Hayden在评论中提到的那样,您的循环似乎只适用于最后一个DataFrame的原因是您只是将df.apply( ... )的结果分配给column_names,每次都会写入。因此,在循环结束时,column_names始终包含列表中最后一个DataFrame的结果。

但您的代码中也存在其他一些问题。在开始for csv in csvlist:的循环中,您实际上从未引用csv - 您只需引用filename,它似乎没有被定义。而dflist似乎只有一个DataFrame。

正如您的问题中所写,代码似乎不起作用。我建议发布您正在使用的真实代码,并且只提供与您的问题相关的内容(例如,如果构建csvlist对您有效,那么您就不会需要向我们展示。)