python - 如何将熊猫数据框从时间与数据重塑为时间与日期与数据
问题描述
我有一个包含每分钟温度数据的大型天气数据集。我想以热图格式将其绘制为时间 vs 日期 vs 温度,就像这样: 几年的温度数据
我在 numpy 中手动执行了一段时间,直到我得到太多数据以至于计算机崩溃了。所以我正在寻找一种方法来使用 pandas 数据框和 plotly 进行这种相同的绘图。
数据框如下所示:
TimeStamp AirTemp Pressure RelHumidty HeatIndex Battery
0 1509159720 78.26 982.9 48.0 78.2600 3.11
1 1509159780 78.08 982.9 48.0 78.0800 3.11
2 1509159840 78.08 982.9 48.0 78.0800 3.11
3 1509159900 78.26 982.8 53.0 78.2600 3.11
4 1509159960 78.62 982.8 48.0 78.6200 3.11
5 1509160020 79.16 982.8 54.0 79.1600 3.11
6 1509160080 80.06 982.9 76.0 83.8179 3.12
7 1509160140 81.50 982.8 50.0 82.2393 3.12
8 1509160200 81.68 982.8 47.0 82.0224 3.12
... ... ... ... ... ... ...
我正在使用的代码片段目前看起来是这样的:
#create axis arrays
dayArray = np.linspace(0,1439,1440,dtype=int)
dateArray = airEndTimePlot - np.arange((airEndTimePlot-airStartTimePlot).days) * timedelta(days=1)
#load data from database
sql_Query = pd.read_sql_query('select * from AirObs', conn)
df = pd.DataFrame(sql_Query, columns=['TimeStamp','AirTemp','Pressure','RelHumidity','HeatIndex','Battery'])
# magic happens #
tempArray = df.AirTemp.<something>
fig = make_subplots(rows=8, cols=1)
fig.append_trace(go.Heatmap(
z=tempArray,
x=dateArray,
y=dayArray,
colorscale='Viridis'), row=1, col=1)
fig.show()
解决方案
最可靠的方法是将您的 unix 时间转换为 Timestamp 对象,下面的代码块将执行此操作,可能有更快的方法将其应用于整个列,但我没有找到任何方便的时间数组包装器
## creating the time column provided
import pandas as pd
df = pd.DataFrame();
df['TimeStamp'] = [1509159720 + (60*i) for i in range(10)]
## new code
df['datetimes'] = [pd.datetime.fromtimestamp(t) for t in df['TimeStamp']]
df['dates'] = [ dt.date() for dt in df['datetimes']]
df['times'] = [ dt.time() for dt in df['datetimes']]
print(df)
输出看起来像
TimeStamp datetimes dates times
0 1509159720 2017-10-27 20:02:00 2017-10-27 20:02:00
1 1509159780 2017-10-27 20:03:00 2017-10-27 20:03:00
2 1509159840 2017-10-27 20:04:00 2017-10-27 20:04:00
3 1509159900 2017-10-27 20:05:00 2017-10-27 20:05:00
4 1509159960 2017-10-27 20:06:00 2017-10-27 20:06:00
5 1509160020 2017-10-27 20:07:00 2017-10-27 20:07:00
6 1509160080 2017-10-27 20:08:00 2017-10-27 20:08:00
7 1509160140 2017-10-27 20:09:00 2017-10-27 20:09:00
8 1509160200 2017-10-27 20:10:00 2017-10-27 20:10:00
9 1509160260 2017-10-27 20:11:00 2017-10-27 20:11:00
然后你可以创建你的情节
fig.append_trace(go.Heatmap(
z=tempArray,
x = df['date'],
y = df['times'],
colorscale='Viridis'), row=1, col=1)
更多时间戳信息可以在这里找到:pd Timestamp ref
推荐阅读
- python - 无法识别数字 5
- android - 在 react native 中为 android 构建发布 apk 对于 svg 文件失败
- css - 如何用我自己的标志替换 Marina 标志?
- ide - Windows 10 中的 Free Pascal IDE (FP) 行为很奇怪
- jsf - 表单验证的立即属性在 JSF 中产生意外结果
- java - 以下java函数没有将数据插入数据库,
- javascript - 来自 javascript 的 asp.net MVC 调用控制器
- asp.net-web-api - 如何增加 .net core 中的请求限制?
- android - 如何在使用 React Native 导航时将推送通知集成到 React Native 中
- json - 火花,蜂巢;系统设计问题每天处理 2TB