是否可以使用生成器/理解生成带有键的对象

时间:2017-07-18 18:02:13

标签: python pandas

import pandas as pd
import os

data = {}
for f in os.listdir('schools/'):
    data[f.replace('.csv','')] = pd.read_csv('schools/'+f)

我经常遇到这种情况,我想使用某种列表理解,我相信可以使用...的格式。

{pd.read_csv('schools/'+f) for f in os.listdir('schools/')}

但是,不知道如何获得钥匙?是否有可能以这种方式生成对象?

1 个答案:

答案 0 :(得分:3)

你想要词典理解

for f in os.listdir('schools/'):
    data[f.replace('.csv','')] = pd.read_csv('schools/'+f)

变为:

data = {f.replace('.csv',''):pd.read_csv(os.path.join('schools',f)) for f in os.listdir('schools')}

使用glob.glob可能会更安全,更易读,因此您可以过滤掉非csv文件而不必join

data = {f.replace('.csv',''):pd.read_csv(f) for f in glob.glob(os.path.join('schools',"*.csv"))}

稍微扩展,将其转换为pandas数据帧(假设每个csv只有一列):

pd.DataFrame({f.replace('.csv','') : pd.read_csv(os.path.join('schools',f)).values.reshape(-1, ) for f in os.listdir('schools')})