Панды читают несколько файлов из разных папок - PullRequest
0 голосов
/ 26 сентября 2019

У меня один и тот же файл с ежеквартальными данными, сохраненными в разных папках, соответствующих кварталу.Другими словами, папка четверть 1, четверть 2, четверть 3, четверть 4. Это единственная разница в пути к файлу.Я хочу прочитать все четыре файла и объединить их в одну базу данных.Я могу сделать это вручную, используя версию упрощенного кода, приведенного ниже, и каждый раз меняя период.

period = ‘Q1’

filepath = ‘filepath/’ + period

file = filepath + ‘/file.xls’

df = pd.read_excel(file)

Я хотел бы автоматизировать его с помощью некоторой формы цикла for (я полагаю).Это перебирает 4 периода, читает файл в базу данных и затем объединяет.Я читал другие ответы о том, как это можно сделать с файлами в той же папке.Но я изо всех сил пытаюсь сделать это, где путь к файлу изменяется.Размещение файлов в одной папке вручную не является желательным решением.

Я попытался сделать период кортежем и списком, содержащим все 4 периода, а затем простой цикл for, но это не сработало.Я получил следующее сообщение об ошибке.

TypeError: Can't convert 'list' object to str implicitly

Очень ценю любой совет.

Ответы [ 4 ]

1 голос
/ 26 сентября 2019

Как насчет того, чтобы вы сначала воспользовались списком, чтобы получить список всех файлов:

periods= ["Q1", "Q2", "Q3", "Q4"]
files = ["filepath/"+ p + "/file.xls" for p in periods]

, а затем загрузили их все в список фреймов данных с помощью

dfs = []
for f in files:
    df = pd.read_excel(f)
    dfs.append(df)
1 голос
/ 26 сентября 2019

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

filepath = 'path/'
file = 'file.xlsx'
periods=['Q1','Q2','Q3','Q4']

files = []
for p in periods:
    files.append(filepath+p+'/'+file)
files

data = []
for f in files:
    data.append(pd.read_excel(f))

df = pd.concat(data)
0 голосов
/ 26 сентября 2019

Вы можете попробовать что-то вроде этого:

complete_df = pd.DataFrame()
for i in range(1,5):
  quarter = 'Q'+str(i)
  filepath = 'filepath/' + quarter
  file = filepath + '/file.xls'
  df = pd.read_excel(file)
  complete_df = complete_df.append(df)
0 голосов
/ 26 сентября 2019

Вы, вероятно, хотите что-то вроде этого:

periods = ['Q1', 'Q2', 'Q3', 'Q4']

df = None
for period in periods:
    filepath = 'filepath/' + period
    file = filepath + '/file.xls'
    if df is None:
        df = pd.read_excel(file)
    else:
        df.append(pd.read_excel(file))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...