我正在尝试使用熊猫和sqlite将数据读入数据框。
如果我从CSV文件中读取代码,我认为此代码可以重新采样到每小时平均值,但是我不确定为什么从Sqlite中读取代码吗?抱歉,我对db知之甚少,非常感谢任何提示。.
如果我运行以下代码,则可以打印第一个df,但会重新采样错误:
import pandas as pd
from sqlalchemy import create_engine
import sqlite3
con = sqlite3.connect('./save_data.db')
df = pd.read_sql("SELECT * from all_data", con, index_col='Date', parse_dates=True)
df.set_index('Date')
print(df)
hourly_avg['kW'] = df['kW'].resample('H').mean()
print('hourly_avg.kW', hourly_avg.kW)
输出:
>>>
=== RESTART: C:\Users\Desktop\tester\Test.py ===
Date kW
0 2020-10-08 12:23:30.968967 68.129997
1 2020-10-08 12:25:39.375298 68.129997
2 2020-10-08 12:26:52.939991 68.129997
3 2020-10-08 12:27:57.839540 68.129997
4 2020-10-08 12:29:02.382524 68.129997
... ... ...
1917 2020-10-09 10:14:35.113254 68.149994
1918 2020-10-09 10:15:08.840759 68.189995
1919 2020-10-09 10:15:41.873328 68.249992
1920 2020-10-09 10:16:14.953312 68.289993
1921 2020-10-09 10:16:48.043465 68.289993
[1922 rows x 2 columns]
Traceback (most recent call last):
File "C:\Users\Desktop\tester\Test.py", line 11, in <module>
hourly_avg['kW'] = df['kW'].resample('H').mean()
File "C:\Users\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\generic.py", line 8087, in resample
offset=offset,
File "C:\Users\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\resample.py", line 1269, in get_resampler
return tg._get_resampler(obj, kind=kind)
File "C:\Users\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\resample.py", line 1435, in _get_resampler
"Only valid with DatetimeIndex, "
TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'RangeIndex'
>>>
编辑
这似乎可以将日期时间索引从index
转换为DatetimeIndex
df.index=pd.to_datetime(df.index)
答案 0 :(得分:0)
您需要使用Datetimeindex
,而忘记了inplace=True
尝试一下:
df.set_index('Date', inplace=True)
代替此:
df.set_index('Date')
这应该解决它。
您可以获得有关 Datatimeindex here
的更多信息