Как добавить строки в фрейм данных с pandas в al oop? - PullRequest
0 голосов
/ 26 февраля 2020

Я работаю со следующим скриптом, чтобы проанализировать некоторые данные из эксперимента. И в конце я хотел бы сохранить определенные данные в виде DataFrame в формате .csv, чтобы продолжать работать с ним. Но я изо всех сил, где разместить этот кадр данных в конце кода.

import os
import numpy as np
import pandas as pd
import pylab as plt
import scipy
from scipy.optimize import curve_fit


DATE = '2020-02-18'
SAMPLE_NAME = 'TEST'

os.chdir('XXX/' + DATE+ '/' + SAMPLE_NAME)
MainFolder = 'XXX/' + DATE + '/' + SAMPLE_NAME
print('\n' + 'You are working on this directory: \n', os.getcwd(), '\n')

def LoadData(files, subfolders):
''' This function loads the data from the files '''
print('The sweeps in the folder are:')
df = []
for file_name in files:
        if file_name.endswith('.csv'):
            print('      ' + os.path.sep + file_name)
            df.append(pd.read_csv(subfolders + os.path.sep + file_name, delimiter=','))
return df

def fit_sin_LD(t_LD, y_LD):
def fit_sin_APD(t_APD, y_APD):
def Plots():


for root, dirs, files in os.walk(MainFolder, topdown=True):
    for subfolders in dirs:
        print(os.path.sep + subfolders)
        for subpath, subdirs, sweepfiles in os.walk(MainFolder + os.path.sep + subfolders + os.path.sep, topdown=True):
        counter = 1
        for dataFromFiles in LoadData(sweepfiles, subfolders):
            print()
            t_LD  = dataFromFiles['TimeMATH']
            y_LD  = dataFromFiles['VoltsMATH']
            fitting_LD = fit_sin_LD(t_LD, y_LD)
            t_APD = dataFromFiles['TimeCH4']
            y_APD = dataFromFiles['VoltsCH4']
            fitting_APD = fit_sin_APD(t_APD, y_APD)
            Phi = np.array([[fitting_LD["phase_LD"],fitting_APD["phase_APD"]]])
            df = pd.DataFrame(Phi, columns=["phase_LD","phase_APD"])
            print(df)
            print('_'*50)
            while not sweepfiles[counter].endswith('.csv'):
                counter = counter + 1
            print('The sweepfile is:', sweepfiles[counter])
            counter = counter + 1
            print('Phase_Shift:', fitting_LD["phase_LD"]-fitting_APD["phase_APD"])
            print('='*30)
            Plots()

И у меня есть такой вывод:

You are working on this directory: 
 'XXX/' + DATE + '/' + TEST 

\Run_2
The sweeps in the folder are:
      \TEST_sweep_1.csv
      \TEST_sweep_2.csv
      \TEST_sweep_3.csv
      \TEST_sweep_4.csv
      \TEST_sweep_5.csv

   phase_LD  phase_APD
0  0.799186   0.787802
__________________________________________________
The sweepfile is: TEST_sweep_1.csv
Phase_Shift: 0.01138438229758243
==============================

   phase_LD  phase_APD
0  0.826551   0.810993
__________________________________________________
The sweepfile is: TEST_sweep_2.csv
Phase_Shift: 0.015558041120443344
==============================

   phase_LD  phase_APD
0  0.834952   0.811156
__________________________________________________
The sweepfile is: TEST_sweep_3.csv
Phase_Shift: 0.023795986346148656
==============================

   phase_LD  phase_APD
0  0.856211   0.842482
__________________________________________________
The sweepfile is: TEST_sweep_4.csv
Phase_Shift: 0.013728505278350567
==============================

   phase_LD  phase_APD
0  0.856638   0.833881
__________________________________________________
The sweepfile is: TEST_sweep_5.csv
Phase_Shift: 0.022756757048449816
==============================

Я хотел бы получить один DataFrame после l oop со всеми собранными данными (объединенными / добавленными), так что я могу легко продолжать работать с меньшим количеством данных, я имею в виду что-то вроде этого:

       phase_LD  phase_APD
0      0.799186   0.787802
1      0.826551   0.810993
2      0.834952   0.811156
3      0.856211   0.842482
4      0.856638   0.833881

Любые советы? Спасибо!

1 Ответ

2 голосов
/ 26 февраля 2020

Я бы сохранил частичные кадры данных в списке, а затем соединил их все:

...
elts = []
for root, dirs, files in os.walk(MainFolder, topdown=True):
    for subfolders in dirs:
        ...
        for dataFromFiles in LoadData(sweepfiles, subfolders):
            ...
            df = pd.DataFrame(Phi, columns=["phase_LD","phase_APD"])
            elts.append(df)
            ...
final_df = pd.concat(elts)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...