无法绘制饼图

时间:2018-07-19 06:02:45

标签: python pandas pie-chart epoch

我有一个纪元纳秒的数据集

       M            d          time      
0  1081083  28000000000  1.530683e+18  
1  1081083  16000000000  1.530683e+18  
2  1081085  33000000000  1.530683e+18  
3  1081083  28000000000  1.530683e+18  
4  1081085  27000000000  1.530683e+18

转换后的外观如下:

      M         d           time
0  1081083  07:16:40 2018-07-04 05:42:20  
1  1081083  09:56:40 2018-07-04 05:43:03  
2  1081085  16:10:00 2018-07-04 05:43:12  
3  1081083  07:16:40 2018-07-04 05:43:51  
4  1081085  05:30:00 2018-07-04 05:44:01

要将时代转换为普通代码,代码为:

import pandas as pd
import time
import matplotlib.pyplot as plt


df1 = pd.read_csv('testsy_1.csv')

df1['time']=pd.to_datetime(df1['time'], unit='ns')

df1['d']=df1['d'].apply(lambda x: time.strftime("%H:%M:%S",time.localtime(x)))

但是当尝试获取df1 ['M'],df1 ['d']的饼图时:

plt.figure(figsize=(16,8))
ax1 = plt.subplot(121, aspect='equal')
df1.plot(kind='pie', y = 'd', ax=ax1, autopct='%1.1f%%', 
startangle=90, shadow=False, labels=df1['M'], legend = False, fontsize=14)

我收到一个错误消息:

TypeError: Empty 'DataFrame': no numeric data to plot

由于已存在转换的数据,因此数据框如何为空?如何在此处绘制饼图?

按照@jezrael的建议,我省略了df1['d']=df1['d'].apply(lambda x: time.strftime("%H:%M:%S",time.localtime(x)))并执行了脚本而未做任何更改,将数据集df.head()的结果提取给我。

但是当将以上内容应用于大约23000行的完整数据集时,我得到了一个可怕的图...问题是什么?

enter image description here

1 个答案:

答案 0 :(得分:1)

存在问题d不是数字。

因此您可以将d列转换为时间增量,然后转换为秒:

df1['d'] = pd.to_timedelta(df1['d']).dt.total_seconds()
print (df1)
         M        d                time
0  1081083  26200.0 2018-07-04 05:42:20
1  1081083  35800.0 2018-07-04 05:43:03
2  1081085  58200.0 2018-07-04 05:43:12
3  1081083  26200.0 2018-07-04 05:43:51
4  1081085  19800.0 2018-07-04 05:44:01

pic

或者如果可能的话,省略:

df1['d']=df1['d'].apply(lambda x: time.strftime("%H:%M:%S",time.localtime(x)))

graph