[英]Name dataframe sequentially and dynamically when opening from csv - Python/Pandas
[英]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_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
你正在混合你的概念。 如果要動態引用已加載的數據幀,請使用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.