CSV名称中字符串的熊猫名称数据帧

时间:2020-07-31 18:04:15

标签: python pandas glob

我有几个具有名称(例如城市名称)字符串的csv,并希望在数据框中使用从该城市名称派生的名称读取它们。

csv名称示例:data_paris.csv,data_berlin.csv

如何循环读取它们以获取df_paris和df_berlin?

到目前为止我尝试过的事情:

IDictionary.Item

我希望有df_rome和df_paris,但我只得到dfname。为什么?

一个相关的问题:Name a dataframe based on csv file name?

谢谢!

3 个答案:

答案 0 :(得分:1)

我建议不要使用自动动态命名,例如df_parisdf_berlin。相反,您应该这样做:

all_files = glob.glob("./*.csv")

# dictionary of dataframes
dfs = dict()
for filename in all_files:
    city_name=re.split("[_.]", filename)[1] # to extract city name from filename

    dfs[city_name] =  pd.read_csv(filename) # assign to the dataframe dictionary

答案 1 :(得分:1)

您正在混合您的概念。如果要动态引用已加载的数据帧,请使用dict

all_files = glob.glob("./*.csv")

dfname={}
                      
for filename in all_files:
    city_name=re.split("[_.]", filename)[1] #to extract city name from filename
    dfname['df' + str(city_name)] = pd.read_csv(filename)
print(list(dfname.keys())

答案 2 :(得分:0)

您要创建的唯一数据框是“ dfname”。每次循环时,您都只会覆盖它。我猜你可以使用globals()来做到这一点,尽管说实话我可能只是创建一个数据帧列表或字典(就像其他人在我键入时建议的那样),或者为“ city”创建一个命名列在我一直附加的主数据框中。但是,按照您的具体要求,您可以这样做:

all_files = glob.glob("./*.csv")

for filename in all_files:
    globals()[filename[5:-4]]=  pd.read_csv(filename)
相关问题