【问题标题】:How do I iterate a loop over several data frames in a list in python如何在python列表中的多个数据帧上迭代循环
【发布时间】:2015-05-23 12:51:53
【问题描述】:

我对编程非常陌生,并且正在使用 Python。对于一个工作项目,我试图读取几个 .csv 文件,将它们转换为数据帧,将一些字段连接成一个列标题,然后将所有数据帧附加到一个大数据帧中。我在 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。

【问题讨论】:

  • 你有一些缩进问题(大概是你被否决的原因之一)。我认为问题出在最后一部分,您分配给column_names,但只有最后一个df 被分配(其余部分被覆盖),即您没有附加到更改dflist 的列表中...大概这不是你的意图。

标签: python-2.7 loops csv pandas dataframe


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-01-13
    • 2019-10-17
    • 2018-03-26
    • 1970-01-01
    • 2021-09-12
    • 2019-11-10
    • 2021-10-31
    • 2021-03-10
    • 2020-07-02
    相关资源
    最近更新 更多