Получите доступ к значениям в словаре фреймов данных и создайте новый фрейм данных с определенными столбцами в pandas - PullRequest
0 голосов
/ 15 апреля 2020

Python новичок здесь.

У меня есть словарь фреймов данных: enter image description here

каждый фрейм данных соответствует отдельному дню:

enter image description here Каждый день содержит 8 столбцов с данными, которые меня интересуют -> ['WINDSPEED_wspd1 [м / с]']

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

Я создал функцию для этого

def get_variables(DictOfDataFrames, ColumnsToPlot, filenames):
     for key, df in DictOfDataFrames.items():  # Use magic unpacking to avoid multiple meteo_data[key]-call
    x=pd.DataFrame(index=range(0,86400,1),columns=filenames)

         if key in filenames:

             x[key]=df[ColumnsToPlot[0]][0:86400].copy()
             y=pd.DataFrame(DictOfDataFrames[key][ColumnsToPlot[1][0:86399]])
return xy
WindSpeed, WindDirection = get_variables(DATA_Meteo,['WINDSPEED_wspd1[m/s]','WINDDIR_wdir1[deg]'], filenames_Meteo[1:3])

Однако таким образом Я перезаписываю y в каждой итерации, поэтому он возвращает значения последнего имени файла, которое было в l oop. С другой стороны, x возвращается как заполненный NaN.

Я пробовал с помощью insert, append, я схожу с ума от этого, который должен быть очень простым для кодирования.

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Я бы предложил:

  • Создать пустой список
  • итерировать на dict и извлечь нужный вам ser ie, добавить его в пустой список
  • создайте фрейм данных из этого списка ser ie

Найдите пример с 2 днями и 2 столбцами данных:

    #%% Import lib

import pandas as pd
import numpy as np

#%% Created  dummy of random data , one dataframe per day
dataframe1 = pd.DataFrame(np.random.randint(0,100,size=(100, 2)), columns=['WINDSPEED_wspd1[m/s]','temp'])
dataframe2 = pd.DataFrame(np.random.randint(0,100,size=(100, 2)), columns=['WINDSPEED_wspd1[m/s]','temp'])

#created teh dummy dict
dict_d ={"day1":dataframe1 , "day2":dataframe2}


list_of_serie = []

for key, value in dict_d.items():
    s = value['WINDSPEED_wspd1[m/s]']  #extract the serie you want
    s= s.rename(key) # change the change of teh serie by the day

    list_of_serie.append(s) # add in a list of serie

# then concatenate all
df = pd.concat(list_of_serie, axis=1) # concatenate this list of series

print(df)
0 голосов
/ 15 апреля 2020

Я наконец нашел ответ от другого пользователя, который сходил с ума с подобной проблемой.

def get_variables(DictOfDataFrames, ColumnsToPlot, filenames):
    first = True
    for key, value in DictOfDataFrames.items():
        if first:
            x = pd.DataFrame(value[ColumnsToPlot[0]])
            y = pd.DataFrame(value[ColumnsToPlot[1]])
            first = False
        else:
            x = x.merge(value[ColumnsToPlot[0]], left_index=True, right_index=True)
            y = y.merge(value[ColumnsToPlot[1]], left_index=True, right_index=True)

    y.columns=DictOfDataFrames.keys() 
    x.columns=DictOfDataFrames.keys() 
    return x, y
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...