Импорт всех файлов csv по пути в фреймах данных seaprate pandas

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

У меня много файлов csv в папке. Для примера скажем, file1.csv в file9.csv. Я хочу импортировать каждый из этих файлов в отдельные фреймы данных. Импортировать его в 1 фрейм данных невозможно, поскольку все файлы имеют разные столбцы. Приведенный ниже код перебирает все файлы csv в этом пути к файлу и должен импортировать их в разные фреймы данных. Однако только я не вижу 9 фреймов данных, а только 1, называемый df. Почему это не работает. Я подумал df.name это помогло бы создать отдельные фреймы данных, но это не так. Кто-нибудь знает, что я должен изменить, чтобы это работало.

 import pandas as pd
import os
import glob

filepath = r'C:/Source data'

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

for filename in all_files:
    name_df = os.path.basename(filename)
    name_df = name_df.replace('.csv','')
    df = pd.read_csv(filename)
    df.name = name_df
 

Комментарии:

1. создайте массив фреймов данных, ссылка на который в настоящее df время изменяется!

Ответ №1:

Вы видите только 1 фрейм данных с именем df, потому что на каждой итерации цикла вы перезаписываете предыдущий фрейм данных. Что вы можете сделать, так это иметь массив фреймов данных или словарь фреймов данных

Словарный подход

Это полезно, если вы хотите получить доступ к фреймам данных по имени.

 import pandas as pd
import glob

filepath = r'C:/Source data'

all_files = glob.glob(filepath   "/*.csv")
df_dict = dict()

for filename in all_files:
    name_df = os.path.basename(filename)
    name_df = name_df.replace('.csv','')
    df_dict[name_df] = pd.read_csv(filename)
 

Подход со списком

Это полезно, если вы хотите получить доступ к фреймам данных по индексу.

 import pandas as pd
import glob

filepath = r'C:/Source data'

all_files = glob.glob(filepath   "/*.csv")
df_list = []

for filename in all_files:
    name_df = os.path.basename(filename)
    name_df = name_df.replace('.csv','')
    df = pd.read_csv(filename)
    df_list.append(df)
 

Ответ №2:

Добавьте их в список фреймов данных и получите доступ по индексу списка, например df_list[0] :

 import pandas as pd
import glob

filepath = r'C:/Source data'

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

df_list = []

for filename in all_files:
    df = pd.read_csv(filename)
    df_list.append(df)
 

Ответ №3:

Вы перезаписываете df объект каждый раз, когда выполняете цикл. dict В этом случае я бы предложил использовать фреймы данных.

 import os
import pandas as pd
import glob

filepath = r'C:/Source data'

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

# create the empty dict to be filled in the loop
dfs = {}

for filename in all_files:
    name_df = os.path.basename(filename)
    name_df = name_df.replace('.csv','')

    # add the df to the dict with the filename as its key
    dfs[name_df] = pd.read_csv(filename)


# then use it like this
print(dfs['file9'])
 

Ответ №4:

Я попробовал примеры со словарем и списком. Оба работают. Большое спасибо всем за вашу помощь.