我有几个具有名称(例如城市名称)字符串的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?
谢谢!
答案 0 :(得分:1)
我建议不要使用自动动态命名,例如df_paris
,df_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)