簡體   English   中英

重新采樣 pandas dataframe 時出現類型錯誤

[英]TypeError when resampling a pandas dataframe

我想在 Pandas dataframe 中每隔 4 行重新采樣一次。 正如所建議的如何在 pandas dataframe 中每隔 4 行 select 並計算滾動平均值,我使用以下代碼

import pandas as pd
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow import keras
from matplotlib import pyplot as plt



#Read the input data
df_generation = pd.read_csv("C:/Users/Data/Electricity Price Forecasting/Generation.csv", sep =";")
print(df_generation.dtypes)
df_generation_short = df_generation[0:2000]
df_generation_short['Time'] = pd.to_datetime(df_generation_short['Time'])

new = df_generation_short['Biomass'].resample('1H').mean()

我將原始 dataframe 中的列時間轉換為日期時間,否則 pandas 將其視為 object 類型(如推薦的錯誤消息,請在此處輸入鏈接描述但是,我仍然收到錯誤消息

TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'RangeIndex'

在錯誤告訴我之前,我還會收到警告:

SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  df_generation_short['Time'] = pd.to_datetime(df_generation_short['Time'])
Traceback (most recent call last):

在這里可以看到dataframe的截圖截屏

你知道我為什么會收到這個錯誤以及如何解決這個問題嗎? 我會很感激每一條評論。

更新:我根據一條評論的建議進行了嘗試,並使用了 apply function: df_generation_short.apply(pd.to_datetime(df_generation_short['Time']))但我收到錯誤消息“ValueError: no results”。 有沒有人知道如何解決這個問題? 不知何故,pandas 不接受“時間”列作為帶有索引的日期 object 盡管我使用df_generation_short['Time'] = pd.to_datetime(df_generation_short['Time'])轉換它。

總結一下我們的談話:

  • 這一行new = df_generation_short['Biomass'].resample('1H').mean()拋出 TypeError:
TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'RangeIndex'
  • 這是因為Biomass列不包含日期輸入。 因此,為了解決這個問題,將您的 DataFrame 索引設置為列Time
df_generation_short = df_generation_short.set_index('Time')
  • 現在,如果您想獲得 1 小時 window 中Biomass的平均值,
new = df_generation_short['Biomass'].resample('1H').mean()
  • 此外,如果您想計算所有列的平均值,只需省略指定列
new = df_generation_short.resample('1H').mean()

或者,如果您希望它用於兩個特定列:例如“Biomass”和“Fossil Oil”:

new = df_generation_short[["Biomass", "Fossil Oil"]].resample('1H').mean()

暫無
暫無

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

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