python - 重新采样熊猫数据框时出现类型错误
问题描述
我想在 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'])
.
解决方案
总结一下我们的谈话:
- 此行
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 索引设置为 columnTime
:
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()
推荐阅读
- c# - 如何使用 C# 使用 Microsoft BOT Framework V4 模板在聊天窗口中显示带有选项和按钮的 HTML 表格?
- amazon-web-services - 如何在将文件上传到亚马逊 s3 时显示进度条?
- sql-server - 如何在case语句中设置存储过程变量
- linux - 当我尝试在 Cent OS 中以 GUI 模式打开 Jmeter 时出现空白屏幕
- swift - 读取存在 sqlite - Swift
- python - 通过 SQLAlchemy 连接到远程 Postgres 服务器
- sql - SQL group by 但顺序很重要
- angular - 如何正确管理 Angular 中的导入?
- android - 如何在 Ubuntu 上打开 Genymotion 开发菜单?(Ctrl + M 不起作用)
- git - 权限被拒绝(公钥)gitlab