在将for循环转换为列表理解方面需要帮助

时间:2019-04-24 13:32:47

标签: python pandas

需要将大约30个csv文件导入到python中,因为我有一个for循环,但是我需要转换为列表理解

所有文件的结构相同,并且它们具有相同的列名,在所有这些文件中,我只需要代码中提到的少数列,并且需要创建一个可以区分数据的列

用于循环

import pandas as pd
cwd = os.getcwd()
dirs =os.listdir(cwd)

dfx=[]

for items in dirs:
    if items.find('GSVA')>0 and items.find('.csv')>0:
        x=cwd+'\\'+items
        temp_df=pd.read_csv((x),encoding = "ISO-8859-1")
        temp_df=temp_df.loc[::,['S.No.','Item','2014-15']]
        temp_df['State']=items.split('-')[1]
        dfx.append(temp_df)

gsva = pd.concat(dfx)

我尝试了以下操作,但没有用

import os 
cwd = os.getcwd()
directory = os.listdir(cwd)

gsva = [(gsva.append(temp)
       temp['State']=items.split('-')[1]
       temp = temp.loc[::,['S.No.','Item','2014-15']]
       temp = pd.read_csv(cwd+'\\'+items)

       for items in directory
       if items.find('GSVA')>0 ]
gsva_1 = pd.concat(gsva)

1 个答案:

答案 0 :(得分:0)

import os
import pandas as pd

cwd = os.getcwd()

dirs = filter(lambda x: x[1]>=0 and x[2]>0, [(x, x.find('.csv'), x.find('GSVA')) for x in os.listdir(cwd)])
temp_df = [pd.read_csv((x),encoding = "ISO-8859-1") for x in [cwd+'\\'+x for x in dirs]]

def add_state(x):
    x['State'] = x.split('-')[1]
    return x

gsva = pd.concat(list(map(add_state, [temp_df.loc[::,['S.No.','Item','2014-15']] for x in temp_df])))