У меня есть более 20 файлов SAS (sas7bdat) с одинаковыми столбцами, которые я хочу прочитать в Python. Мне нужен итеративный процесс, чтобы прочитать все файлы и rbind в один большой df. Это то, что у меня есть до сих пор, но выдает ошибку, говорящую об отсутствии объектов для объединения.
import pyreadstat
import glob
import os
path = r'C:\\Users\myfolder' # or unix / linux / mac path
all_files = glob.glob(os.path.join(path , "/*.sas7bdat"))
li = []
for filename in all_files:
reader = pyreadstat.read_file_in_chunks(pyreadstat.read_sas7bdat, filename, chunksize= 10000, usecols=cols)
for df, meta in reader:
li.append(df)
frame = pd.concat(li, axis=0)
Я нашел этот ответ полезным для чтения в файлах csv: Импортируйте несколько файлов CSV в pandas и объедините их в один DataFrame
Возможно, инициализируйте пустой список для хранения всех фреймов данных, добавьте каждый фрейм данных в этот список внутри цикла по всем вашим файлам, а затем передайте этот список в pd.concat()
. Насколько велики ваши файлы?
@AlexK Пробовал, не работает. Все файлы вместе составляют около 25 ГБ.
У тебя столько оперативной памяти? Не можете протестировать свой код, но пробовали ли вы его отлаживать? Умеете ли вы читать каждый отдельный файл? Что содержит li
, прежде чем вы передадите его pd.concat
? Кроме того, ваша последняя строка должна быть вне внешнего цикла.
Итак, если у вас слишком большие файлы данных sas и вы планируете добавить их все в один df, тогда:
#chunksize command avoids the RAM from crashing...
for filename in all_files:
reader = pyreadstat.read_file_in_chunks(pyreadstat.read_sas7bdat, filename, chunksize= 10000, usecols=cols)
for df, meta in reader:
li.append(df)
frame = pd.concat(li, axis=0, ignore_index=True)
Что не так с опубликованным кодом? Ошибка? Нежелательный результат? Загляните в
pandas.concat
, чтобы просмотреть список ячеек данных DataFrames. Можетpandas.concat(df for df, meta in reader)
?