簡體   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