首页 > 解决方案 > 重新采样熊猫数据框时出现类型错误

问题描述

我想在 Pandas 数据框中每隔 4 行重新采样一次。正如所建议的如何在熊猫数据框中选择每第四行并在此处计算滚动平均值我使用以下代码

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()

我将原始数据框中的列时间转换为日期时间,因为否则熊猫将其视为对象类型(如建议在此处输入链接描述 )但是,我仍然收到错误消息

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):

在这里您可以看到数据框的屏幕截图截屏

你知道我为什么会收到这个错误以及如何解决这个问题吗?我会很感激每一条评论。

更新:我尝试了一条评论的建议并使用了应用功能: df_generation_short.apply(pd.to_datetime(df_generation_short['Time']))但我收到错误消息“ValueError:没有结果”。有没有人知道如何解决这个问题?不知何故,熊猫不接受“时间”列作为带有索引的日期对象,尽管我使用df_generation_short['Time'] = pd.to_datetime(df_generation_short['Time']).

标签: pythonpandasdataframe

解决方案


总结一下我们的谈话:

  • 此行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 索引设置为 column Time
df_generation_short = df_generation_short.set_index('Time')
  • Biomass现在,如果您想获得1 小时窗口内的平均值,
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()

推荐阅读