无法使用 Seaborn 绘图
Posted
技术标签:
【中文标题】无法使用 Seaborn 绘图【英文标题】:Unable to Plot using Seaborn 【发布时间】:2019-01-04 12:47:06 【问题描述】:你好我的数据集如下
username switch_state time
abcd sw-off 07:53:15 +05:00
abcd sw-on 07:53:15 +05:00
现在使用这个我需要找到在给定的一天,一天中有多少次开关状态被操纵,即打开或关闭。我的测试代码如下
switch_off=df.loc[df['switch_state']=='sw-off']#only off switches
groupy_result=switch_off.groupby(['time','username']).count()['switch_state'].unstack#grouping the data on the base of time and username and finding the count on a given day. fair enough
这个 groupby 子句的结果为
print(groupy_result)
username abcd
time
05:08:35 3
07:53:15 3
07:58:40 1
现在您可以看到计数在时间列中连接在一起。我需要将它们分开,以便我可以使用 Seaborn 散点图绘制它。我需要有 x 和 y 值,在我的情况下是 x=time,y=count 请帮助我,我该如何绘制此列。
`
【问题讨论】:
【参考方案1】:您可以尝试以下方法将数据作为DataFrame
本身获取
df = df.loc[df['switch_state']=='sw-off']
df['count'] = df.groupby(['username','time'])['username'].transform('count')
这两行代码将为您提供一个更新的数据框df
,它将添加一个名为count
的列。
df = df.drop_duplicates(subset=['username', 'time'], keep='first')
上面的行将删除重复的行。然后你可以绘制df['time']
和df['count']
。
plt.scatter(df['time'], df['count'])
【讨论】:
abcd 07:53:15 3.0 abcd 07:53:15 3.0 这是输出,因为您可以看到时间没有正确分组,因为它正在重复。您不认为在 groupby 语句之后必须只有一个计数条目与时间相比,例如两行都应该在 abcd 07:53:15 3.0 上分组为单个 很好的答案,谢谢,但在绘图时它给了我一个错误,说 float() 参数必须是字符串或数字,而不是 'datetime.time' 我可以尝试将 datetime 转换为 float 但我会想问一下解决这个问题的最佳选择是什么? 谢谢!你可以试试 ply.plot_date()。我认为这也取决于其他因素来决定最佳方法。以上是关于无法使用 Seaborn 绘图的主要内容,如果未能解决你的问题,请参考以下文章