项目场景:
对于商超逐日都会有许多收支流水,对于一些分店和总店一些导出流水格式不一。末了要将这些流水汇总后一起查对
题目形貌
以下是对于Excel表单中日期顺序的大概性
- 对于一张Excel表中多日期(年代日 时分秒)按照正常时间正序大概倒序
- 对于一张Excel表中单一某一天(年代日 时分秒)按照正常时间正序大概倒序
- 对于一张Excel表中多日期(年代日 时分秒)按照日期月份是指定顺序,按照日期是指定顺序
- 对于一张Excel表中多日期(年代日 时分秒) 按照日期月份是乱序,按照日期是指定顺序
- 对于一张Excel表中多日期(年代日) 按照正常时间正序大概倒序
- 对于一张Excel表中单一某一天(年代日)按照正常时间正序大概倒序
- 对于一张Excel表中多日期(年代日)按照日期月份是指定顺序,按照日期是指定顺序
- 对于一张Excel表中多日期(年代日)按照日期月份是乱序,按照日期是指定顺序
缘故起因分析:
对于Excel表格,尤其是日期中不含时分秒的环境,经常利用排序时会出现同一日期数据顺序错乱的环境
原数据表 错误排序后效果 正确排序后效果
错误排序和正确排序区别在于2024-01-01 00:00:00 对应的0101-1,0101-2,0101-3 的先后顺序。途中除源数据表,其余均为降序分列
办理方案:
data = {“A”:"", "B":""}
df = pd.DataFrame(data)
# ascending=False 是降序
# ascending=True 是升序
- # 1.对于一张Excel表中多日期(年月日 时分秒)按照正常时间正序或者倒序
- # 2.对于一张Excel表中单一某一天(年月日 时分秒)按照正常时间正序或者倒序
- # 注意这种方式不可以出现时分秒为00:00:00情况
- df.sort_values(by="A", inplace=True, ascending=False)
复制代码- # 3.对于一张Excel表中多日期(年月日 时分秒)按照日期月份是指定顺序,按照日期是指定顺序
- # 4.对于一张Excel表中多日期(年月日 时分秒) 按照日期月份是乱序,按照日期是指定顺序
- # 7.对于一张Excel表中多日期(年月日)按照日期月份是指定顺序,按照日期是指定顺序
- # 8.对于一张Excel表中多日期(年月日)按照日期月份是乱序,按照日期是指定顺序
- # todo 新增Month列,并进行分组
- pd_deal['A_format'] = pd.to_datetime(pd_deal['A_format'])
- pd_deal['Month'] = pd.to_datetime(pd_deal['A_format']).dt.strftime("%Y-%m")
- # todo 遍历每一个月份,得到该月的日期
- for name, group in pd_deal.groupby('Month'):
- # todo 得到月内去重后的日期,这一步很重要,pandas判断单调性的方法对于重复数据会判断失误,因此需要进行去重
- dates_only = group['A_format'].dt.strftime("%Y-%m-%d").drop_duplicates()
- df1 = pd_deal[pd_deal["Month"].isin([name])]
- # todo 由于乱序或者日期非统一单调性因此,将月内全部日期按照索引删掉
- index1 = df1.index.values.tolist()
- pd_deal.drop(index=index1, inplace=True)
- # todo 判断单调性 这种情况是某月内容只有一个日期
- if dates_only.is_monotonic_decreasing and dates_only.is_monotonic_increasing:
- df1['A_sfm'] = pd.to_datetime(df1['A']).dt.strftime("%H:%M:%S")
- # todo 筛出并去掉时分秒为00:00:00
- df2 = df1[~df1["A_sfm"].isin(["00:00:00"])]
- # todo 将时分秒去重
- only_day_data = df2['A_sfm'].drop_duplicates()
- # todo 判断单调性(降序)
- if only_day_data.is_monotonic_decreasing:
- # todo 顺序翻转
- df1 = df1.iloc[::-1]
- df1.drop(["A_sfm"], axis=1, inplace=True)
- # todo 判断单调性
- elif dates_only.is_monotonic_decreasing:
- df1 = df1.iloc[::-1]
- pd_deal = pd_deal._append(df1)
- # todo 索引重新排序
- pd_deal.reset_index(inplace=True)
- pd_deal.drop(["Month", "A_format", "index"], axis=1, inplace=True)
复制代码- # 5.对于一张Excel表中多日期(年月日) 按照正常时间正序或者倒序
- # 6.对于一张Excel表中单一某一天(年月日)按照正常时间正序或者倒序
- df= df.iloc[::-1] # -1 是翻转,属于倒序,正常就是默认顺序
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |