【发布时间】:2020-02-15 13:49:51
【问题描述】:
我使用的“df”对于每个datetime 都有多行。我想每 10 分钟绘制一个具有相同 datetime 的所有坐标的散点图。每个位置都有一个数据条目,每 10 分钟在df_data
如果我手动将时间输入t_list = [datetime(2017, 12, 23, 06, 00, 00), datetime(2017, 12, 23, 06, 10, 00), datetime(2017, 12, 23, 06, 20, 00)],它会起作用,但我想用使用df 中的日期的东西来替换它,这样我就可以将它用于多个数据集。
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime, timedelta
import numpy as np
df_data = pd.read_csv('C:\data.csv')
df_data['datetime'] = pd.to_datetime(df_data['TimeStamp'] )
df = df_data[(df_data['datetime']>= datetime(2017, 12, 23, 06,00, 00)) &
(df_data['datetime']< datetime(2017, 12, 23, 07, 00, 00))]
##want a time array for all of the datetimes in the df
t_list = [datetime(2017, 12, 23, 06, 00, 00), datetime(2017, 12, 23, 06, 10, 00),
datetime(2017, 12,
23, 06, 20, 00)]
for t in t_list:
t_end = t + timedelta(minutes = 10)
t_text = t.strftime("%d-%b-%Y (%H:%M)")
#boolean indexing with multiple conditions, you should wrap each single condition in brackets
df_t = df[(df['datetime']>=t) & (df['datetime']<t_end)]
#get data into variable
ws = df_t['Sp_mean']
lat = df_t['x']
lon = df_t['y']
col = 0.75
#calc min/max for setting scale on images
min_ws = df['Sp_mean'].min()
max_ws = df['Sp_mean'].max()
plt.figure(figsize=(15,10))
plt.scatter(lon, lat, c=ws,s=300, vmin=min_ws, vmax=max_ws)
plt.title('event' + t_text,fontweight = 'bold',fontsize=18)
plt.show()
我尝试了几种方法来尝试将datetime 复制为可迭代列表,但没有给我想要的结果,最近的结果如下:
date_arrray = np.arange(np.datetime64(df['datetime']))
df['timedelta'] = pd.to_timedelta(df['datetime'])
示例数据集
【问题讨论】:
-
您能否发布数据集的样本或至少发布您使用的日期格式?
-
您是否要进行“分组”? -- pandas.pydata.org/pandas-docs/stable/reference/api/…
-
@gustavovelascoh - 编辑问题以包含数据集的 sn-p
-
@squar_o 我是否正确理解您希望每 10 分钟间隔一个散点图?
-
t_list = df['TimeStamp'].unique()。然后对其进行排序并迭代值以获得正确的切片。
标签: python python-2.7 datetime for-loop