无法绘制饼图

unable to plot a pie chart

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

       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 行的完整数据集时,我得到了一个可怕的情节......问题是什么?

有问题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

或者如果可能省略:

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