在 Seaborn 中使用 datetime64[ns] 对象绘图
Plotting with with datetime64[ns] objects in Seaborn
我有一个大型(> 100 万行)数据集,其中包含日期时间戳。我想查看全天可能出现的趋势。因此,如果我这样做开始:print(df['timestamp'])
它会将我的数据显示为:
0 2014-01-01 13:11:50.3
1 2011-02-13 04:12:45.0
名称:时间戳,长度:1000000,数据类型:datetime64[ns] /
但是,我不想要那里的日期,因为我只想绘制全天的趋势,而不关心今天是什么日子。所以我做了这行代码:
df['timestamp'] = pd.Series([val.time() for val in df['timestamp']])
,这给了我想要的唯一时间戳数据,但是 returns dtype 为 'object',我无法绘制。例如,当我尝试使用 Seaborn 时:sns.lineplot(df['timestamp'], df['Task_Length'])
,我收到错误“TypeError:位置 0 处的对象类型无效”。
但是,如果我只是做完全相同的 sns.lineplot(df['timestamp'], df['Task_Length'])
,没有切断日期的中间步骤,将其保留为 datetime64[ns] 对象而不是通用 'object' 数据类型;它情节很好。但是,这会导致跨越多年的情节,而我只想查看一天中的时间趋势。
为清楚起见,这是一个 pandas 数据框,其中每一行都有一个任务发生,通常我可以将一列称为 'TaskName',并且每一列都与一个 'timestamp' 如前所述,我想使用任何类型的 Seaborn 绘图来分析日常趋势,例如一天中不同时间发生的不同任务类型,而不关心一年中的几天。感谢您的帮助。
编辑* 更新我尝试过的另一件事:使用原始的 datetime64[ns] 对象绘制,我尝试做 sns.lineplot(df['timestamp'].dt.time, df['Task_Length'])
这给出了与我添加代码行以切断日期时相同的错误.无法理解为什么 Seaborn 不喜欢时间部分。
这对我有用。
区别在于将“时间戳”列从日期时间转换为时间。
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.DataFrame([['2014-01-01 13:11:50.3',10],['2011-02-13 04:12:45.0',15]], columns=['timestamp','Task_Length'])
df['timestamp'] = pd.to_datetime(df['timestamp']).dt.strftime('%H:%M:%S')
sns.lineplot(df['timestamp'], df['Task_Length'])
plt.show()
请参阅此问题以获取更多详细信息
我有一个大型(> 100 万行)数据集,其中包含日期时间戳。我想查看全天可能出现的趋势。因此,如果我这样做开始:print(df['timestamp'])
它会将我的数据显示为:
0 2014-01-01 13:11:50.3
1 2011-02-13 04:12:45.0
名称:时间戳,长度:1000000,数据类型:datetime64[ns] /
但是,我不想要那里的日期,因为我只想绘制全天的趋势,而不关心今天是什么日子。所以我做了这行代码:
df['timestamp'] = pd.Series([val.time() for val in df['timestamp']])
,这给了我想要的唯一时间戳数据,但是 returns dtype 为 'object',我无法绘制。例如,当我尝试使用 Seaborn 时:sns.lineplot(df['timestamp'], df['Task_Length'])
,我收到错误“TypeError:位置 0 处的对象类型无效”。
但是,如果我只是做完全相同的 sns.lineplot(df['timestamp'], df['Task_Length'])
,没有切断日期的中间步骤,将其保留为 datetime64[ns] 对象而不是通用 'object' 数据类型;它情节很好。但是,这会导致跨越多年的情节,而我只想查看一天中的时间趋势。
为清楚起见,这是一个 pandas 数据框,其中每一行都有一个任务发生,通常我可以将一列称为 'TaskName',并且每一列都与一个 'timestamp' 如前所述,我想使用任何类型的 Seaborn 绘图来分析日常趋势,例如一天中不同时间发生的不同任务类型,而不关心一年中的几天。感谢您的帮助。
编辑* 更新我尝试过的另一件事:使用原始的 datetime64[ns] 对象绘制,我尝试做 sns.lineplot(df['timestamp'].dt.time, df['Task_Length'])
这给出了与我添加代码行以切断日期时相同的错误.无法理解为什么 Seaborn 不喜欢时间部分。
这对我有用。 区别在于将“时间戳”列从日期时间转换为时间。
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.DataFrame([['2014-01-01 13:11:50.3',10],['2011-02-13 04:12:45.0',15]], columns=['timestamp','Task_Length'])
df['timestamp'] = pd.to_datetime(df['timestamp']).dt.strftime('%H:%M:%S')
sns.lineplot(df['timestamp'], df['Task_Length'])
plt.show()
请参阅此问题以获取更多详细信息