Использование Pandas для создания DataFrame с помощью серии, что приводит к ошибке памяти - программирование
Подтвердить что ты не робот

Использование Pandas для создания DataFrame с помощью серии, что приводит к ошибке памяти

Я использую библиотеку Pandas для анализа временных рядов дистанционного зондирования. В конце концов я хотел бы сохранить свой DataFrame в csv, используя размеры чанков, но я столкнулся с небольшой проблемой. Мой код генерирует 6 массивов NumPy, которые я конвертирую в серию Pandas. Каждая из этих серий содержит много предметов

>>> prcpSeries.shape
(12626172,)

Я хотел бы добавить Серии в DataFrame (df) Pandas, чтобы я мог сохранить их по частям в файл CSV.

d = {'prcp': pd.Series(prcpSeries),
     'tmax': pd.Series(tmaxSeries),
     'tmin': pd.Series(tminSeries),
     'ndvi': pd.Series(ndviSeries),
     'lstm': pd.Series(lstmSeries),
     'evtm': pd.Series(evtmSeries)}

df = pd.DataFrame(d)
outFile ='F:/data/output/run1/_'+str(i)+'.out'
df.to_csv(outFile, header = False, chunksize = 1000)
d = None
df = None

Но мой код застрял в следующей строке, давая ошибку памяти

df = pd.DataFrame(d)

Какие-либо предложения? Можно ли заполнить блок данных Pandas DataFrame фрагментом?

4b9b3361

Ответ 1

Если вы знаете, что каждая из них имеет одинаковую длину, вы можете создать DataFrame непосредственно из массива, а затем добавить каждый столбец:

df = pd.DataFrame(prcpSeries, columns=['prcp'])
df['tmax'] = tmaxSeries
...

Примечание. Вы также можете использовать метод to_frame (который позволяет (необязательно) передать имя - что полезно, если в Серии нет один):

df = prcpSeries.to_frame(name='prcp')

Однако, если они являются переменной длиной, это потеряет некоторые данные (любые массивы, длина которых больше, чем prcpSeries). Альтернативой здесь является создание каждого в виде DataFrame, а затем выполнение внешнего соединения (используя concat):

df1 = pd.DataFrame(prcpSeries, columns=['prcp'])
df2 = pd.DataFrame(tmaxSeries, columns=['tmax'])
...

df = pd.concat([df1, df2, ...], join='outer', axis=1)

Например:

In [21]: dfA = pd.DataFrame([1,2], columns=['A'])

In [22]: dfB = pd.DataFrame([1], columns=['B'])

In [23]: pd.concat([dfA, dfB], join='outer', axis=1)
Out[23]:
   A   B
0  1   1
1  2 NaN