代码import matplotlib.pyplot as plt import re indexOne = data1['discount_rate'].astype(str).apply(lambda x: re.findall('\d+:\d+', x)!=[]) #满减优惠形式的索引 indexTwo = data1['discount_rate'].astype(str).apply(lambda x: re.findall('\d+\.\d+', x)!=[]) #折扣率优惠形式的索引 dfOne = data1.loc[indexOne,:] #取出满减优惠形式的数据 dfTwo = data1.loc[indexTwo,:] #取出折扣率优惠形式的数据 #在满减优惠形式的数据中,15天内优惠券被使用的数目 numberOne = sum((dfOne['date'] - dfOne['date_received']).dt.days <= 15) #在满减优惠形式的数据中,15天内优惠券未被使用的数目 numberTwo = len(dfOne) - numberOne #在折扣率优惠形式的数据中,15天内优惠券被使用的数目 numberThree = sum((dfTwo['date'] - dfTwo['date_received']).dt.days <= 15) #在折扣率优惠形式的数据中,15天内优惠券未被使用的数目 numberFour = len(dfTwo) - numberThree #绘制图形 plt.figure(figsize=(6,3)) plt.rcParams['font.sans-serif'] = 'Simhei' plt.subplot(1,2,1) plt.pie((numberOne, numberTwo), autopct='%.1f%%', pctdistance=1.4) plt.legend(['优惠券15天内被使用','优惠券15天内未被使用'], fontsize=7, loc=(0.15,0.91)) #添加图例 plt.title('满减优惠形式', fontsize=15, y=1.05) #添加标题 plt.subplot(1,2,2) plt.pie([numberThree, numberFour], autopct='%.1f%%', pctdistance=1.4) plt.legend(["优惠券15天内被使用","优惠券15天内未被使用"], fontsize=7, loc=(0.15,0.91)) #添加图例 plt.title('折扣率优惠形式', fontsize=15, y=1.05) #添加标题 plt.show()报错unsupported operand type(s) for -: 'NaTType' and 'str'解决
时间: 2023-11-22 07:55:16 浏览: 136
Matplotlib.pyplot 三维绘图的实现示例
这个错误提示是因为在计算时间差时,出现了空值(NaN)和字符串相减的情况。可以先将这些空值替换成一个非空值,比如用当前日期来填充空值,代码如下:
```
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import re
data1 = pd.read_csv('data.csv')
data1['date_received'] = pd.to_datetime(data1['date_received'], format='%Y%m%d')
data1['date'] = pd.to_datetime(data1['date'], format='%Y%m%d')
data1['date_received'] = data1['date_received'].fillna(pd.to_datetime('today'))
data1['date'] = data1['date'].fillna(pd.to_datetime('today'))
indexOne = data1['discount_rate'].astype(str).apply(lambda x: re.findall('\d+:\d+', x)!=[]) #满减优惠形式的索引
indexTwo = data1['discount_rate'].astype(str).apply(lambda x: re.findall('\d+\.\d+', x)!=[]) #折扣率优惠形式的索引
dfOne = data1.loc[indexOne,:] #取出满减优惠形式的数据
dfTwo = data1.loc[indexTwo,:] #取出折扣率优惠形式的数据
#在满减优惠形式的数据中,15天内优惠券被使用的数目
numberOne = sum((dfOne['date'] - dfOne['date_received']).dt.days <= 15)
#在满减优惠形式的数据中,15天内优惠券未被使用的数目
numberTwo = len(dfOne) - numberOne
#在折扣率优惠形式的数据中,15天内优惠券被使用的数目
numberThree = sum((dfTwo['date'] - dfTwo['date_received']).dt.days <= 15)
#在折扣率优惠形式的数据中,15天内优惠券未被使用的数目
numberFour = len(dfTwo) - numberThree
#绘制图形
plt.figure(figsize=(6,3))
plt.rcParams['font.sans-serif'] = 'Simhei'
plt.subplot(1,2,1)
plt.pie((numberOne, numberTwo), autopct='%.1f%%', pctdistance=1.4)
plt.legend(['优惠券15天内被使用','优惠券15天内未被使用'], fontsize=7, loc=(0.15,0.91)) #添加图例
plt.title('满减优惠形式', fontsize=15, y=1.05) #添加标题
plt.subplot(1,2,2)
plt.pie([numberThree, numberFour], autopct='%.1f%%', pctdistance=1.4)
plt.legend(["优惠券15天内被使用","优惠券15天内未被使用"], fontsize=7, loc=(0.15,0.91)) #添加图例
plt.title('折扣率优惠形式', fontsize=15, y=1.05) #添加标题
plt.show()
```
这样修改后,空值就被替换掉了,就可以正常运行代码了。
阅读全文