繁体   English   中英

Pandas 名称 dataframe 来自 csv 名称中的字符串

[英]Pandas name dataframe from a string in csv name

我有几个 csv 的名称中有一个字符串(例如城市名称),并希望在 dataframe 中读取它们,名称源自该城市名称。

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

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

到目前为止我尝试了什么:

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

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

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

一个相关问题: 根据 csv 文件名命名 dataframe?

谢谢!

我建议不要像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

你正在混合你的概念。 如果要动态引用已加载的数据帧,请使用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())

您正在创建的唯一 dataframe 是“dfname”。 您只需在每次循环时继续覆盖它。 我想你可以使用 globals() 来做到这一点,但老实说,我可能只是创建一个列表或数据框的字典(似乎其他人在我输入这个时建议),或者为“城市”创建一个命名列在我不断附加的主 dataframe 中。 但是,根据您的具体要求,您可能可以这样做:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM