Функция добавления Pandas Dataframe не сохраняется - PullRequest
0 голосов
/ 30 августа 2018

После этих вопросов и ответов мне удалось объединить несколько файлов CSV в один фрейм данных временного ряда, добавив столбец для добавления имени файла CSV, из которого поступила каждая запись, например:

import os
import glob
import pandas as pd

path = ''

all_files = glob.glob(os.path.join(path, "*.csv")) 

names = [os.path.basename(x) for x in glob.glob(path+'\*.csv')] 

df = pd.DataFrame()
for file_ in all_files:
    file_df = pd.read_csv(file_, sep=',', parse_dates=["capture_datetime_utc"], index_col="capture_datetime_utc")
    file_df['file_name'] = file_ 
    df = df.append(file_df)
df.shape

Кажется, это работает нормально, и - как вы можете видеть в этой записной книжке Jupyter - я получаю фрейм данных, форма которого состоит из 5 столбцов.

Но затем, когда я уменьшу этот временной ряд df с 15-минутных интервалов до среднечасового значения, вот так:

df_h = df.resample('H').mean()
df_h.shape

Я получаю фрейм данных, форма которого имеет только 4 столбца.

Так что похоже, что этой функции добавления, которую я выполнил, не хватает постоянства, и мне нужно, чтобы она сохранялась. Я попытался вставить аргумент "inplace = True" в саму функцию добавления (выдал ошибку), а также после нее (без разницы).

Если кто-нибудь может показать мне способ сделать этот добавленный столбец постоянным, я был бы очень признателен!

1 Ответ

0 голосов
/ 30 августа 2018

Ваш столбец file_name удаляется, поскольку в нем нет числового значения dtype. Не говоря уже о том, что, поскольку вы эффективно агрегируете фрейм данных с помощью mean(), вас не должно интересовать сохранение file_name исходного источника данных. После переноса среднего значения в ваших объединенных фреймах данных эта информация будет бессмысленной.

Я бы рекомендовал использовать pd.concat() вместо df.append(). Даны два образца CSV-файлов:

sample1.csv

capture_datetime_utc,fertilizer_level,light,soil_moisture_present,air_temperature_celsius
2018-07-30 17:34:33,-1.0,1.28,12.13,26.42
2018-07-30 17:49:33,-1.0,1.26,11.87,26.51
2018-07-30 18:04:33,-1.0,1.26,11.47,26.37
2018-07-30 18:19:33,-1.0,1.17,12.00,26.28
2018-07-30 18:34:33,-1.0,0.94,11.47,25.34

sample2.csv

capture_datetime_utc,fertilizer_level,light,soil_moisture_present,air_temperature_celsius
2018-08-28 07:50:23,-1.0,40.73,6.53,31.82
2018-08-28 08:05:23,-1.0,47.13,6.65,33.65
2018-08-28 08:20:23,-1.0,51.94,6.65,35.00
2018-08-28 08:35:23,-1.0,57.46,6.65,36.55
2018-08-28 08:50:23,-1.0,14.17,6.77,32.98

Вы можете сделать следующее:

all_files = ['sample1.csv','sample2.csv']

df = pd.concat([pd.read_csv(file_, sep=',', parse_dates=["capture_datetime_utc"], index_col="capture_datetime_utc") for file_ in all_files], keys=all_files)

df = df.reset_index().set_index('capture_datetime_utc').groupby('level_0').resample('H').mean().dropna()

Что дает:

                                  fertilizer_level      light  \
level_0     capture_datetime_utc                                
sample1.csv 2018-07-30 17:00:00               -1.0   1.270000   
            2018-07-30 18:00:00               -1.0   1.123333   
sample2.csv 2018-08-28 07:00:00               -1.0  40.730000   
            2018-08-28 08:00:00               -1.0  42.675000   

                                  soil_moisture_present  \
level_0     capture_datetime_utc                          
sample1.csv 2018-07-30 17:00:00               12.000000   
            2018-07-30 18:00:00               11.646667   
sample2.csv 2018-08-28 07:00:00                6.530000   
            2018-08-28 08:00:00                6.680000   

                                  air_temperature_celsius  
level_0     capture_datetime_utc                           
sample1.csv 2018-07-30 17:00:00                 26.465000  
            2018-07-30 18:00:00                 25.996667  
sample2.csv 2018-08-28 07:00:00                 31.820000  
            2018-08-28 08:00:00                 34.545000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...