Pandas name dataframe из строки в имени csv

У меня есть несколько csv со строкой в ​​их имени (например, название города), и я хочу прочитать их в фрейме данных с именами, полученными из этого названия города.

пример имен 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?

Спасибо!


person physiker    schedule 31.07.2020    source источник
comment
Вместо df_paris и df_berlin вы должны создать словарь dfs с ключами 'paris' и 'berlin', чтобы вы могли использовать dfs['paris'] и dfs['berlin'].   -  person Quang Hoang    schedule 31.07.2020
comment
не могли бы вы написать как ответ и поподробнее? Благодарность!   -  person physiker    schedule 31.07.2020


Ответы (3)


Я бы не рекомендовал автоматическое динамическое именование, например 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
person Quang Hoang    schedule 31.07.2020

Вы смешиваете свои концепции. Если вы хотите динамически ссылаться на загруженные фреймы данных, используйте 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())

person Rob Raymond    schedule 31.07.2020
comment
Я не понимаю, о чем вы говорите ... сколько кода вы сделали с dict и пониманием? вы всегда можете ссылаться на загруженный df как dfname["dfparis"]. Цель print() заключалась в том, чтобы показать это. Вы знаете, что dict - это динамическая структура пар ключ / значение? - person Rob Raymond; 01.08.2020
comment
да знаю дикт! Я просто еще не использовал / не видел dataframe как dict. - person physiker; 02.08.2020

единственный фрейм данных, который вы создаете, - это dfname. Вы просто продолжаете перезаписывать это каждый раз, когда выполняете цикл. Я предполагаю, что вы могли бы сделать это с помощью globals (), хотя, честно говоря, я бы, вероятно, просто создал список или dict фреймов данных (как кажется, другие предлагали, когда я набирал это), или же создать именованный столбец для `` города '' в главном фрейме данных, который я просто продолжаю добавлять. Но, следуя тому, о чем вы конкретно просите, вы, вероятно, могли бы сделать это так:

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

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