我是编程新手并且正在使用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。
答案 0 :(得分:1)
正如Andy Hayden在评论中提到的那样,您的循环似乎只适用于最后一个DataFrame的原因是您只是将df.apply( ... )
的结果分配给column_names
,每次都会写入。因此,在循环结束时,column_names
始终包含列表中最后一个DataFrame的结果。
但您的代码中也存在其他一些问题。在开始for csv in csvlist:
的循环中,您实际上从未引用csv
- 您只需引用filename
,它似乎没有被定义。而dflist
似乎只有一个DataFrame。
正如您的问题中所写,代码似乎不起作用。我建议发布您正在使用的真实代码,并且只提供与您的问题相关的内容(例如,如果构建csvlist
对您有效,那么您就不会需要向我们展示。)