簡體   English   中英

訪問數據幀字典中的值並創建一個新的 dataframe 與 pandas 中的某些列

[英]Access values in a dictionary of dataframes and create a new dataframe with certain columns in pandas

Python 初學者在這里。

我有一個數據框字典: 在此處輸入圖像描述

每個 dataframe 對應不同的一天:

在此處輸入圖像描述 每天包含 8 列數據,我感興趣 -> ['WINDSPEED_wspd1[m/s]']

我想創建一個新變量(數據框),它只包含有關風速的數據,每天有一列(數據框字典中的每個鍵)

我創建了一個 function 來執行此操作

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,因此它會返回它在循環中進入的最后一個文件名的值。 另一方面,x 被返回為滿是 NaN。

我試過插入,append,我對這個發瘋了,這應該是超級簡單的編碼。

我建議:

  • 創建一個空列表
  • 迭代字典並提取你想要的系列,將它添加到空列表中
  • 從這個系列列表中創建一個 dataframe

請查找包含 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)

我終於從另一個因類似問題而失去理智的用戶那里找到了答案。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM