|
5鱼币
win10 64位
pycharm
一、要做的事:
1.读取excel中的时间数据;
2.把表格中的up_time, down_time转换成小时数。比如 8:30:00转成8.5小时整形数字
3.画叠加柱状图,up_time 在下边down_time上边的堆叠图。
二、问题:
现在在code里写了两个函数,发现excel里的数据是object类型。用这两个函数都不能用apply操作转换。
请帮忙提出实现一功能,需要如何修改或者思路。
- import pandas as pd
- import matplotlib.pyplot as plt
- # #函数一:字符串类型的时间转换
- # def to_time(x):
- # h,m,s=x.strip().split(':')
- # return int(h)+int(m/60)
- #函数二:时间类型转换成
- def to_time(y):
- h = y.hour
- m = y.minute
- s = y.second
- return int(h)+int(m/60)
- data = pd.read_excel(r'demo.xlsx')
- # print(data)
- print(data.dtypes)
- #计算开车时间和停车时间
- data = data.loc[data.up_time.apply(to_time)].loc[data.down_time.apply(to_time)]
- print('1')
- print(data)
- print('2')
- #绘制叠加柱状图
- data.plot.bar(x='date',y=['up_time','down_time'],stacked=True)
- #设置标题
- plt.title ('up_time vs down_time per shift',fontsize=16,fontweight='bold')
- #紧凑型标签
- plt.tight_layout()
- plt.show()
复制代码
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv("原始数据")#最好是csv文件
#定义时间转化函数
def to_time(y):
h = pd.to_datetime(y).hour
m = pd.to_datetime(y).minute
s = pd.to_datetime(y).second
return int(h)+round(m/60,2)
data["up_time"] = data["up_time"].apply(to_time)
data["down_time"] = data["down_time"].apply(to_time)
data.plot.bar(x='date',y=['up_time','down_time'],stacked=True)
#我除了原始数据是csv文件之外,所有数据都跟你是一样的
#我这里是有结果的,如果你按照这个代码还改不了,那你就在仔细复习以下apply函数的使用方法吧
|
-
最佳答案
查看完整内容
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv("原始数据")#最好是csv文件
#定义时间转化函数
def to_time(y):
h = pd.to_datetime(y).hour
m = pd.to_datetime(y).minute
s = pd.to_datetime(y).second
return int(h)+round(m/60,2)
data["up_time"] = data["up_time"].apply(to_time)
data["down_time"] = data["down_time"].apply(to_time)
data.plot.bar(x='da ...
|