首页
关于
Search
1
git lg彩色显示日志
24 阅读
2
在 Ubuntu 22.04 LTS 中安装 Docker
19 阅读
3
CentOs/Ubuntu搭建上网x-ui
18 阅读
4
git使用多个源和多个分支
15 阅读
5
git保存账号密码
14 阅读
默认分类
网站搭建
Windows
Linux
Docker
OpenWrt
Hackintosh
Git
Python
Pandas
Web开发
JavaScript
FFmpeg
Demo
工具
刷机
油猴脚本
Excel
Chrome Extension
登录
Search
标签搜索
Pandas
读取
时区
Chrome
centos8
求和
Nginx
Typecho
404
csv
国际站
询盘导出
油猴脚本
bbr
Ubuntu
远程桌面
日志
log
数据清洗
打印机
野生程序猿
累计撰写
151
篇文章
累计收到
0
条评论
首页
栏目
默认分类
网站搭建
Windows
Linux
Docker
OpenWrt
Hackintosh
Git
Python
Pandas
Web开发
JavaScript
FFmpeg
Demo
工具
刷机
油猴脚本
Excel
Chrome Extension
页面
关于
搜索到
151
篇与
的结果
2022-06-01
Python日期时间处理
使用 time 模块展示当前日期和时间将天、小时、分钟转换为秒使用 Pandas 获取当前日期和时间将字符串转换为日期时间对象以毫秒为单位获取当前时间以 MST、EST、UTC、GMT 和 HST 获取当前日期时间从给定的日期当中获取星期几计算两个日期时间对象之间的时差将 5 分钟添加到 Unix 时间戳在 Python 中遍历一系列日期巴黎时间更改为纽约时间使用 Python 获得最后7个工作日从今天的日期和一个人的生日推算年龄获得本月的第一个星期二将整数转换为日期对象当前日期减去 N 天的天数比较两个日期从 datetime 对象中提取年份在 Python 中找到星期几从当前日期获取 7 天前的日期将两个日期时间对象之间的差值转换为秒获得任何一个月的第三个星期五从 Python 中的周数获取日期获取特定日期的工作日创建一个 15 分钟前的 DateTime从特定日期获取周的开始和结束日期两个日期之间的差异(以秒为单位)以这种格式获取昨天的日期MMDDYY从今天的日期获取上周三所有可用时区的列表打印获取指定开始日期和结束日期之间的日期范围毫秒转换为数据查找给定日期之后的第一个星期日的日期将(Unix)时间戳秒转换为日期和时间字符串以月为单位的两个日期之间的差异将本地时间字符串转换为 UTC获取当月的最后一个星期四从特定日期查找一年中的第几周从给定日期获取星期几用 AM PM 打印当前时间获得一个月的最后一天从工作日值中获取工作日名称将 N 小时数添加到当前日期时间从当前日期获取年、月、日、小时、分钟获取特定月份和年份的最后一个星期日查找特定日期的年份中的哪一天查找当前日期是工作日还是周末组合 datetime.date 和 datetime.time 对象获得每月的第 5 个星期一将日期时间对象转换为日期对象获取没有微秒的当前日期时间将 N 秒数添加到特定日期时间从当前日期获取两位数的月份和日期从特定日期获取月份数据的开始和结束日期以周为单位的两个日期之间的差异将字符串格式的日期转换为 Unix 时间戳获取最后一个周日和周六的日期检查对象是否属于 datetime.date 类型获取特定日期的周数获取 UTC 时间获取本周的开始和结束日期两个日期之间的差异(以分钟为单位)将日期时间对象转换为日期字符串获得上周五将 3 周添加到任何特定日期在其他两个日期之间生成一个随机日期查找从今天开始的第一个星期一的日期两个日期之间的差异(以天为单位)向当前日期添加六个月将数据时间对象转换为 Unix(时间戳)将年、月、日、时、分、秒的 N 个数字添加到当前日期时间获取指定开始日期和结束日期之间的日期范围减去 N 个年、月、日、时、分、秒到当前日期时间获取指定年份和月份的月份第一天的工作日和月份的天数打印特定年份的所有星期一打印特定年份的日历从月份编号中获取月份名称从给定日期获取一周的开始和结束日期根据当前日期查找上一个和下一个星期一的日期获取当前季度的第一个日期和最后一个日期使用 time 模块展示当前日期和时间import time from time import gmtime, strftime t = time.localtime() print (time.asctime(t)) print(strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())) print(strftime("%A", gmtime())) print(strftime("%D", gmtime())) print(strftime("%B", gmtime())) print(strftime("%y", gmtime())) # Convert seconds into GMT date print(strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime(1234567890)))使用 Pandas 获取当前日期和时间import pandas as pd print(pd.datetime.now()) print(pd.datetime.now().date()) print(pd.datetime.now().year) print(pd.datetime.now().month) print(pd.datetime.now().day) print(pd.datetime.now().hour) print(pd.datetime.now().minute) print(pd.datetime.now().second) print(pd.datetime.now().microsecond)将字符串转换为日期时间对象from datetime import datetime from dateutil import parser d1 = "Jan 7 2015 1:15PM" d2 = "2015 Jan 7 1:33PM" # If you know date format date1 = datetime.strptime(d1, '%b %d %Y %I:%M%p') print(type(date1)) print(date1) # If you don't know date format date2 = parser.parse(d2) print(type(date2)) print(date2)以毫秒为单位获取当前时间import time milliseconds = int(round(time.time() * 1000)) print(milliseconds)以 MST、EST、UTC、GMT 和 HST 获取当前日期时间from datetime import datetime from pytz import timezone mst = timezone('MST') print("Time in MST:", datetime.now(mst)) est = timezone('EST') print("Time in EST:", datetime.now(est)) utc = timezone('UTC') print("Time in UTC:", datetime.now(utc)) gmt = timezone('GMT') print("Time in GMT:", datetime.now(gmt)) hst = timezone('HST') print("Time in HST:", datetime.now(hst))从给定的日期当中获取星期几import datetime dayofweek = datetime.date(2010, 6, 16).strftime("%A") print(dayofweek) # weekday Monday is 0 and Sunday is 6 print("weekday():", datetime.date(2010, 6, 16).weekday()) # isoweekday() Monday is 1 and Sunday is 7 print("isoweekday()", datetime.date(2010, 6, 16).isoweekday()) dayofweek = datetime.datetime.today().strftime("%A") print(dayofweek) print("weekday():", datetime.datetime.today().weekday()) print("isoweekday()", datetime.datetime.today().isoweekday())计算两个日期时间对象之间的时差import datetime from datetime import timedelta datetimeFormat = '%Y-%m-%d %H:%M:%S.%f' date1 = '2016-04-16 10:01:28.585' date2 = '2016-03-10 09:56:28.067' diff = datetime.datetime.strptime(date1, datetimeFormat)\ - datetime.datetime.strptime(date2, datetimeFormat) print("Difference:", diff) print("Days:", diff.days) print("Microseconds:", diff.microseconds) print("Seconds:", diff.seconds)将 5 分钟添加到 Unix 时间戳import datetime import calendar future = datetime.datetime.utcnow() + datetime.timedelta(minutes=5) print(calendar.timegm(future.timetuple()))在 Python 中遍历一系列日期import datetime start = datetime.datetime.strptime("21-06-2020", "%d-%m-%Y") end = datetime.datetime.strptime("05-07-2020", "%d-%m-%Y") date_generated = [start + datetime.timedelta(days=x) for x in range(0, (end - start).days)] for date in date_generated: print(date.strftime("%d-%m-%Y"))巴黎时间更改为纽约时间import pendulum in_paris = pendulum.datetime(2016, 8, 7, 22, 24, 30, tz='Europe/Paris') print(in_paris) in_us = in_paris.in_timezone('America/New_York') print(in_us)使用 Python 获得最后7个工作日from datetime import date from datetime import timedelta today = date.today() for i in range(7): d = today - timedelta(days=i) if d.weekday() < 5: print(d)从今天的日期和一个人的生日推算年龄from datetime import date def calculate_age(born): today = date.today() try: birthday = born.replace(year=today.year) except ValueError: birthday = born.replace(year=today.year, month=born.month + 1, day=1) if birthday > today: return today.year - born.year - 1 else: return today.year - born.year print(calculate_age(date(2001, 3, 1)))获得本月的第一个星期二import calendar from datetime import datetime c = calendar.Calendar(firstweekday=calendar.SUNDAY) monthcal = c.monthdatescalendar(datetime.today().year, datetime.today().month) try: tues = [day for week in monthcal for day in week if day.weekday() == calendar.TUESDAY and day.month == datetime.today().month][0] print(tues) except IndexError: print('No date found')将整数转换为日期对象from datetime import datetime i = 1545730073 timestamp = datetime.fromtimestamp(i) print(timestamp) print(type(timestamp))当前日期减去 N 天的天数from datetime import datetime, timedelta d = datetime.today() - timedelta(days=5) print(d)比较两个日期import datetime a = datetime.datetime(2020, 12, 31, 23, 59, 59) b = datetime.datetime(2020, 11, 30, 23, 59, 59) print(a < b) print(a > b)从 datetime 对象中提取年份import datetime year = datetime.date.today().year print(year)在 Python 中找到星期几import pendulum dt = pendulum.parse('2021-05-18') print(dt.day_of_week) dt = pendulum.parse('2021-05-01') print(dt.day_of_week) dt = pendulum.parse('2021-05-21') print(dt.day_of_week)从当前日期获取 7 天前的日期from datetime import datetime, timedelta now = datetime.now() for x in range(7): d = now - timedelta(days=x) print(d.strftime("%Y-%m-%d"))将两个日期时间对象之间的差值转换为秒import datetime time1 = datetime.datetime.strptime('19 01 2021', '%d %m %Y') time2 = datetime.datetime.strptime('25 01 2021', '%d %m %Y') difference = time2 - time1 print(difference) seconds = difference.total_seconds() print(seconds)获得任何一个月的第三个星期五import calendar c = calendar.Calendar(firstweekday=calendar.SUNDAY) year = 2021 month = 5 monthcal = c.monthdatescalendar(year, month) try: third_friday = [day for week in monthcal for day in week if day.weekday() == calendar.FRIDAY and day.month == month][2] print(third_friday) except IndexError: print('No date found')从 Python 中的周数获取日期import datetime from dateutil.relativedelta import relativedelta week = 25 year = 2021 date = datetime.date(year, 1, 1) + relativedelta(weeks=+week) print(date)获取特定日期的工作日import datetime print(datetime.date(2020, 5, 15).isocalendar()[2])创建一个 15 分钟前的 DateTimeimport datetime dt = datetime.datetime.now() - datetime.timedelta(minutes=15) print(dt)从特定日期获取周的开始和结束日期import pendulum dt = pendulum.datetime(2012, 9, 5) start = dt.start_of('week') print(start.to_datetime_string()) end = dt.end_of('week') print(end.to_datetime_string())两个日期之间的差异(以秒为单位)from datetime import datetime fmt = '%Y-%m-%d %H:%M:%S' d1 = datetime.strptime('2020-01-01 17:31:22', fmt) d2 = datetime.strptime('2020-01-03 17:31:22', fmt) days_diff = d2 - d1 print(days_diff.days * 24 * 60 * 60)以这种格式获取昨天的日期MMDDYYfrom datetime import date, timedelta yesterday = date.today() - timedelta(days=1) print(yesterday.strftime('%m%d%y'))从今天的日期获取上周三from datetime import date from datetime import timedelta today = date.today() offset = (today.weekday() - 2) % 7 wednesday = today - timedelta(days=offset) print(wednesday)所有可用时区的列表打印import pytz for i in pytz.all_timezones: print(i)获取指定开始日期和结束日期之间的日期范围import datetime start = datetime.datetime.strptime("21-06-2020", "%d-%m-%Y") end = datetime.datetime.strptime("05-07-2020", "%d-%m-%Y") date_generated = [start + datetime.timedelta(days=x) for x in range(0, (end - start).days)] for date in date_generated: print(date.strftime("%d-%m-%Y"))毫秒转换为数据import datetime time_in_millis = 1596542285000 dt = datetime.datetime.fromtimestamp(time_in_millis / 1000.0, tz=datetime.timezone.utc) print(dt)查找给定日期之后的第一个星期日的日期import datetime def next_weekday(d, weekday): days_ahead = weekday - d.weekday() if days_ahead <= 0: days_ahead += 7 return d + datetime.timedelta(days_ahead) d = datetime.date(2021, 5, 16) next_sunday = next_weekday(d, 6) print(next_sunday)将(Unix)时间戳秒转换为日期和时间字符串from datetime import datetime dateStr = datetime.fromtimestamp(1415419007).strftime("%A, %B %d, %Y %I:%M:%S") print(type(dateStr)) print(dateStr)以月为单位的两个日期之间的差异from datetime import datetime from dateutil import relativedelta date1 = datetime.strptime('2014-01-12 12:00:00', '%Y-%m-%d %H:%M:%S') date2 = datetime.strptime('2021-07-15 12:00:00', '%Y-%m-%d %H:%M:%S') r = relativedelta.relativedelta(date2, date1) print(r.months + (12 * r.years))将本地时间字符串转换为 UTCfrom datetime import * from dateutil import * from dateutil.tz import * utc_zone = tz.gettz('UTC') local_zone = tz.gettz('America/Chicago') utc_zone = tz.tzutc() local_zone = tz.tzlocal() local_time = datetime.strptime("2020-10-25 15:12:00", '%Y-%m-%d %H:%M:%S') print(local_time) local_time = local_time.replace(tzinfo=local_zone) print(local_time) utc_time = local_time.astimezone(utc_zone) print(utc_time) utc_string = utc_time.strftime('%Y-%m-%d %H:%M:%S') print(utc_string)将本地时间字符串转换为 UTCfrom datetime import * from dateutil import * from dateutil.tz import * utc_zone = tz.gettz('UTC') local_zone = tz.gettz('America/Chicago') utc_zone = tz.tzutc() local_zone = tz.tzlocal() local_time = datetime.strptime("2020-10-25 15:12:00", '%Y-%m-%d %H:%M:%S') print(local_time) local_time = local_time.replace(tzinfo=local_zone) print(local_time) utc_time = local_time.astimezone(utc_zone) print(utc_time) utc_string = utc_time.strftime('%Y-%m-%d %H:%M:%S') print(utc_string)获取当月的最后一个星期四import calendar from datetime import datetime month = calendar.monthcalendar(datetime.today().year, datetime.today().month) thrusday = max(month[-1][calendar.THURSDAY], month[-2][calendar.THURSDAY]) print(thrusday)从特定日期查找一年中的第几周import pendulum dt = pendulum.parse('2015-05-18') print(dt.week_of_year) dt = pendulum.parse('2019-12-01') print(dt.week_of_year) dt = pendulum.parse('2018-01-21') print(dt.week_of_year)从给定日期获取星期几import datetime import calendar dt = datetime.datetime(2021, 4, 25, 23, 24, 55, 173504) print(calendar.day_name[dt.weekday()])用 AM PM 打印当前时间from datetime import datetime print(datetime.today().strftime("%I:%M %p"))获得一个月的最后一天import calendar print(calendar.monthrange(2002, 1)[1]) print(calendar.monthrange(2008, 6)[1]) print(calendar.monthrange(2012, 2)[1]) print(calendar.monthrange(2015, 2)[1])从工作日值中获取工作日名称import calendar print(calendar.day_name[0]) print(calendar.day_name[1]) print(calendar.day_name[2]) print(calendar.day_name[3]) print(calendar.day_name[4]) print(calendar.day_name[5]) print(calendar.day_name[6])将 N 小时数添加到当前日期时间from datetime import datetime, timedelta d = datetime.today() + timedelta(hours=18) print(d)从当前日期获取年、月、日、小时、分钟import datetime now = datetime.datetime.now() print(now.year, now.month, now.day, now.hour, now.minute, now.second)获取特定月份和年份的最后一个星期日import calendar month = calendar.monthcalendar(2021, 2) last_sunday = max(month[-1][calendar.SUNDAY], month[-2][calendar.SUNDAY]) print(last_sunday)查找特定日期的年份中的哪一天import pendulum dt = pendulum.parse('2015-05-18') print(dt.day_of_year) dt = pendulum.parse('2019-12-01') print(dt.day_of_year) dt = pendulum.parse('2018-01-21') print(dt.day_of_year)查找当前日期是工作日还是周末import datetime weekno = datetime.datetime.today().weekday() if weekno < 5: print("Weekday") else: # 5 Sat, 6 Sun print("Weekend")组合 datetime.date 和 datetime.time 对象import datetime d = datetime.datetime.combine(datetime.date(2020, 11, 14), datetime.time(10, 23, 15)) print(d)获得每月的第 5 个星期一import calendar c = calendar.Calendar(firstweekday=calendar.SUNDAY) year = 2016 month = 2 monthcal = c.monthdatescalendar(year, month) try: fifth_monday = [day for week in monthcal for day in week if day.weekday() == calendar.MONDAY and day.month == month][4] print(fifth_monday) except IndexError: print('No date found')将日期时间对象转换为日期对象from datetime import datetime datetime_obj = datetime(2020, 12, 15, 10, 15, 45, 321474) print(datetime_obj) date_obj = datetime_obj.date() print(date_obj)获取没有微秒的当前日期时间from datetime import datetime print(datetime.now().isoformat(' ', 'seconds'))将 N 秒数添加到特定日期时间import datetime a = datetime.datetime(2020, 12, 31, 23, 59, 45) b = a + datetime.timedelta(seconds=30) print(a) print(b)从当前日期获取两位数的月份和日期import datetime dt = datetime.datetime.now() print(dt.strftime('%m')) print('{:02d}'.format(dt.month)) print(f'{dt.month:02d}') print('%02d' % dt.month) print(dt.strftime('%d')) print('{:02d}'.format(dt.day)) print(f'{dt.day:02d}') print('%02d' % dt.day)从特定日期获取月份数据的开始和结束日期import pendulum dt = pendulum.datetime(2012, 9, 5) start = dt.start_of('month') print(start.to_datetime_string()) end = dt.end_of('month') print(end.to_datetime_string())以周为单位的两个日期之间的差异from datetime import date date1 = date(2020, 12, 23) date2 = date(2021, 5, 11) days = abs(date1 - date2).days print(days // 7)将字符串格式的日期转换为 Unix 时间戳import datetime stime = '15/05/2021' print(datetime.datetime.strptime(stime, "%d/%m/%Y").timestamp())获取最后一个周日和周六的日期from datetime import datetime, timedelta def prior_week_end(): return datetime.now() - timedelta(days=((datetime.now().isoweekday() + 1) % 7)) def prior_week_start(): return prior_week_end() - timedelta(days=6) print('Sunday', format(prior_week_start())) print('Saturday', format(prior_week_end()))检查对象是否属于 datetime.date 类型import datetime x = '2012-9-1' y = datetime.date(2012, 9, 1) print(isinstance(x, datetime.date)) print(isinstance(y, datetime.date))获取特定日期的周数import datetime print(datetime.date(2020, 5, 15).isocalendar()[1])获取 UTC 时间from datetime import datetime dt = datetime.utcnow() print(dt)获取本周的开始和结束日期import pendulum today = pendulum.now() start = today.start_of('week') print(start.to_datetime_string()) end = today.end_of('week') print(end.to_datetime_string())两个日期之间的差异(以分钟为单位)from datetime import datetime fmt = '%Y-%m-%d %H:%M:%S' d1 = datetime.strptime('2010-01-01 17:31:22', fmt) d2 = datetime.strptime('2010-01-03 17:31:22', fmt) days_diff = d2 - d1 print(days_diff.days * 24 * 60)将日期时间对象转换为日期字符串import datetime t = datetime.datetime(2020, 12, 23) x = t.strftime('%m/%d/%Y') print(x)获得上周五from datetime import date from datetime import timedelta today = date.today() offset = (today.weekday() - 4) % 7 friday = today - timedelta(days=offset) print(friday)将 3 周添加到任何特定日期import pendulum dt = pendulum.datetime(2012, 2, 15) dt = dt.add(weeks=3) print(dt.to_date_string())在其他两个日期之间生成一个随机日期import random import time def str_time_prop(start, end, time_format, prop): stime = time.mktime(time.strptime(start, time_format)) etime = time.mktime(time.strptime(end, time_format)) ptime = stime + prop * (etime - stime) return time.strftime(time_format, time.localtime(ptime)) def random_date(start, end, prop): return str_time_prop(start, end, '%m/%d/%Y %I:%M %p', prop) print(random_date("1/1/2020 1:10 PM", "1/1/2021 1:10 AM", random.random()))查找从今天开始的第一个星期一的日期from dateutil.rrule import rrule, WEEKLY, MO from datetime import date next_monday = rrule(freq=WEEKLY, dtstart=date.today(), byweekday=MO, count=1)[0] print(next_monday)两个日期之间的差异(以天为单位)from datetime import date d1 = date(2019, 8, 18) d2 = date(2021, 12, 10) days_diff = d2 - d1 print(days_diff.days)向当前日期添加六个月from datetime import datetime from dateutil.relativedelta import * date = datetime.now() print(date) date = date + relativedelta(months=+6) print(date)将数据时间对象转换为 Unix(时间戳)import datetime import time # Saturday, October 10, 2015 10:10:00 AM date_obj = datetime.datetime(2015, 10, 10, 10, 10) print("Unix Timestamp: ", (time.mktime(date_obj.timetuple())))将年、月、日、时、分、秒的 N 个数字添加到当前日期时间import datetime from dateutil.relativedelta import relativedelta add_days = datetime.datetime.today() + relativedelta(days=+6) add_months = datetime.datetime.today() + relativedelta(months=+6) add_years = datetime.datetime.today() + relativedelta(years=+6) add_hours = datetime.datetime.today() + relativedelta(hours=+6) add_mins = datetime.datetime.today() + relativedelta(minutes=+6) add_seconds = datetime.datetime.today() + relativedelta(seconds=+6) print("Current Date Time:", datetime.datetime.today()) print("Add 6 days:", add_days) print("Add 6 months:", add_months) print("Add 6 years:", add_years) print("Add 6 hours:", add_hours) print("Add 6 mins:", add_mins) print("Add 6 seconds:", add_seconds)获取指定开始日期和结束日期之间的日期范围import datetime start = datetime.datetime.strptime("2016-06-15", "%Y-%m-%d") end = datetime.datetime.strptime("2016-06-30", "%Y-%m-%d") date_array = \ (start + datetime.timedelta(days=x) for x in range(0, (end-start).days)) for date_object in date_array: print(date_object.strftime("%Y-%m-%d"))减去 N 个年、月、日、时、分、秒到当前日期时间import datetime from dateutil.relativedelta import relativedelta sub_days = datetime.datetime.today() + relativedelta(days=-6) sub_months = datetime.datetime.today() + relativedelta(months=-6) sub_years = datetime.datetime.today() + relativedelta(years=-6) sub_hours = datetime.datetime.today() + relativedelta(hours=-6) sub_mins = datetime.datetime.today() + relativedelta(minutes=-6) sub_seconds = datetime.datetime.today() + relativedelta(seconds=-6) print("Current Date Time:", datetime.datetime.today()) print("Subtract 6 days:", add_days) print("Subtract 6 months:", add_months) print("Subtract 6 years:", add_years) print("Subtract 6 hours:", add_hours) print("Subtract 6 mins:", add_mins) print("Subtract 6 seconds:", add_seconds)获取指定年份和月份的月份第一天的工作日和月份的天数import calendar print("Year:2002 - Month:2") month_range = calendar.monthrange(2002, 2) print("Weekday of first day of the month:", month_range[0]) print("Number of days in month:", month_range[1]) print() print("Year:2010 - Month:5") month_range = calendar.monthrange(2010, 5) print("Weekday of first day of the month:", month_range[0]) print("Number of days in month:", month_range[1])打印特定年份的所有星期一from datetime import date, timedelta year = 2018 date_object = date(year, 1, 1) date_object += timedelta(days=1-date_object.isoweekday()) while date_object.year == year: print(date_object) date_object += timedelta(days=7)打印特定年份的日历import calendar cal_display = calendar.TextCalendar(calendar.MONDAY) # Year: 2019 # Column width: 1 # Lines per week: 1 # Number of spaces between month columns: 0 # No. of months per column: 2 print(cal_display.formatyear(2019, 1, 1, 0, 2))从月份编号中获取月份名称import calendar import datetime # Month name from number print("Month name from number 5:") month_num = 1 month_abre = datetime.date(2015, month_num, 1).strftime('%b') month_name = datetime.date(2015, month_num, 1).strftime('%B') print("Short Name:", month_abre) print("Full Name:", month_name) print("\nList of all months from calendar") # Print list of all months from calendar for month_val in range(1, 13): print(calendar.month_abbr[month_val], "-", calendar.month_name[month_val])从给定日期获取一周的开始和结束日期from datetime import datetime, timedelta date_str = '2018-01-14' date_obj = datetime.strptime(date_str, '%Y-%m-%d') start_of_week = date_obj - timedelta(days=date_obj.weekday()) # Monday end_of_week = start_of_week + timedelta(days=6) # Sunday print(start_of_week) print(end_of_week)根据当前日期查找上一个和下一个星期一的日期import datetime today = datetime.date.today() last_monday = today - datetime.timedelta(days=today.weekday()) coming_monday = today + datetime.timedelta(days=-today.weekday(), weeks=1) print("Today:", today) print("Last Monday:", last_monday) print("Coming Monday:", coming_monday)获取当前季度的第一个日期和最后一个日期from datetime import datetime, timedelta current_date = datetime.now() current_quarter = round((current_date.month - 1) / 3 + 1) first_date = datetime(current_date.year, 3 * current_quarter - 2, 1) last_date = datetime(current_date.year, 3 * current_quarter + 1, 1)\ + timedelta(days=-1) print("First Day of Quarter:", first_date) print("Last Day of Quarter:", last_date)
2022年06月01日
5 阅读
0 评论
0 点赞
2022-05-30
Pandas的pivot_table函数(数据透视表)
pivot_table() 的特点就是默认显示指定索引列和所有数值列。索引显示的是唯一值,所以会把对应的数值处理成均值。其他str类型的列都会自动忽略。当然,使用pivot_table() 时,可以通过添加参数进行计数或求和示例中账号是int类型,如果是str类型,那么运行结果不会显示[‘账号’]这一列的内容。import numpy as np import pandas as pd df = pd.DataFrame({ '账号':[714466,714466,714466,737550,146832,218895,218895,412290,740150,141962,163416,239344,239344,307599,688981,729833,729833], '客户名称':['华山派股份有限公司','华山派股份有限公司','华山派股份有限公司','丐帮(北京) 合伙人公司','恶人谷资产管理公司','桃花岛','桃花岛','有间客栈','逍遥子影业','白驼山(上海)影视艺术有限公司','聚贤庄','全真教药业','全真教药业','天地会快递','福寿堂','快手三教育培训有限公司','快手三教育培训有限公司'], '销售':['令狐冲','令狐冲','令狐冲','令狐冲','江小鱼','江小鱼','江小鱼','段誉','段誉','欧阳克','欧阳克','欧阳克','欧阳克','韦小宝','韦小宝','韦小宝','韦小宝'], '销售总监':['岳不群','岳不群','岳不群','岳不群','岳不群','岳不群','岳不群','岳不群','岳不群','完颜洪烈','完颜洪烈','完颜洪烈','完颜洪烈','完颜洪烈','完颜洪烈','完颜洪烈','完颜洪烈'], '产品':['黑玉断续膏','葵花宝典','含笑半步癫','黑玉断续膏','黑玉断续膏','黑玉断续膏','葵花宝典','含笑半步癫','黑玉断续膏','黑玉断续膏','黑玉断续膏','含笑半步癫','葵花宝典','含笑半步癫','黑玉断续膏','黑玉断续膏','如意勾'], '数量':[1,2,1,3,1,3,1,2,4,2,2,1,3,5,2,3,1], '价格':[3000,2000,1000,3000,1000,3000,1000,2000,4000,2000,2000,1000,2000,3000,1000,4000,2000], '状态':['流程中','流程中','待审批','驳回','已完成','流程中','流程中','待审批','驳回','已完成','流程中','待审批','待审批','已完成','已完成','驳回','流程中'], })index指定单索引索引变成了[客户名称]这一列,values显示的只有数字,而且都处理成均值。比如:华山三个,数量4/3,价格6000/3,账号就不用说了,三个都一样,均值自然就是其中一个;快手两个,数量4/2,价格6000/2dd = pd.pivot_table(df,index=['客户名称'])指定多索引索引顺序能决定不同的视觉体验,虽然结果是一致的。dd = pd.pivot_table(df,index=['销售总监','销售','客户名称'])values如果不需要显示全部的数值列,可以用Values参数指定# 显然Values不能随便指定,pivot_table()只能显示数值列 print(pd.pivot_table(df, index=['销售总监','销售'], values=['状态'])) ''' Empty DataFrame Columns: [] Index: [(完颜洪烈, 欧阳克), (完颜洪烈, 韦小宝), (岳不群, 令狐冲), (岳不群, 段誉), (岳不群, 江小鱼)] '''aggfunc当我们未设置aggfunc时,它默认aggfunc='mean’计算均值。columnsfill_valuecolumns参数就是用来显示字符型数据的,和fill_value搭配使用补充:当 values,aggfunc,columns 的取值只有一个时,有无中括号效果略有不同。columns,没有的字段显示NaNfill_value,用0填充空值pd.pivot_table(df, index=['销售总监','销售'], values=['价格'],aggfunc=[np.sum],columns=['产品'])pd.pivot_table(df, index=['销售总监','销售'], values=['价格'],aggfunc=[np.sum],columns=['产品'],fill_value=0)通过添加参数,还可以显示更多信息。下面这个就花哨多了pd.pivot_table(df, index=['销售总监','销售','客户名称','产品'],values=['数量','价格'],aggfunc=[np.sum],columns=['状态'],fill_value=0,margins=True)以销售总监层面,来看销售状态(aggfunc的参数使用了字典的方式对每一列做出了不同的计算要求。也可以加多个,比如 ‘价格’:[np.mean,np.sum])pd.pivot_table(df,index=['销售总监','状态'], values=['数量','价格'], columns=['产品'],aggfunc={'数量':len,'价格':np.sum},fill_value=0,margins=True)数据透视表过滤生成数据后,你可以使用DataFrame的操作方式对其进行过滤。比如:你只想看某一位销售总监:data = pd.pivot_table(df,index=['销售总监','状态'], values=['数量','价格'], columns=['产品'],aggfunc={'数量':len,'价格':np.sum},fill_value=0) data.query("销售总监==['完颜洪烈']")查看所有待审批和驳回的交易data = pd.pivot_table(df,index=['销售总监','状态'], values=['数量','价格'], columns=['产品'],aggfunc={'数量':len,'价格':np.sum},fill_value=0) data.query("状态==['待审批','驳回']")转到Excelpd.pivot_table(df,index=['销售总监','销售','产品'], values=['数量','价格'],aggfunc=[np.sum,np.mean],fill_value=0)xs允许我向下钻取数据透视表的一个横截面。我们也可以向下钻取更多级别。取得「销售总监」为「岳不群」的数据data = pd.pivot_table(df,index=['销售总监','销售','产品'], values=['数量','价格'],aggfunc=[np.sum,np.mean],fill_value=0)xs中的level可以通过get_level_values来获得例如,我们要查看所有销售总监:查看所有销售:试着按「销售总监」进行输出:写入文件import numpy as np import pandas as pd df = pd.read_csv('F:\\Temp\\datas\\xiaoshou.csv') data = pd.pivot_table(df,index=['销售总监','销售','产品'], values=['数量','价格'],aggfunc=[np.sum,np.mean],fill_value=0) writer = pd.ExcelWriter('F:\\Temp\\datas\\output.xlsx') for name in data.index.get_level_values(0).unique(): temp_df = data.xs(name, level=0) temp_df.to_excel(excel_writer=writer, sheet_name=name) writer.save()我们得到了一个由两个sheet页的Excel文件,sheet_name分别是销售总监「完颜洪烈」和「岳不群」。
2022年05月30日
7 阅读
0 评论
0 点赞
2022-05-27
Tampermonkey阿里巴巴国际站批量导出之[产品信息]
// ==UserScript== // @name 阿里巴巴国际站批量导出产品信息 // @namespace http://tampermonkey.net/ // @version 2.1.3 // @description 导出产品ID、链接、所属赛道 // @author Mike // @icon http://is.alicdn.com/favicon.ico // @match https://hz-productposting.alibaba.com/product/* // @grant GM_addStyle // ==/UserScript== 'use strict'; var globalAllresult = []; var downloaded = false; var repeated = false; // 下面这段代码生成下载方式 (function(console){ console.save = function(data, filename){ if(!data) { console.error('Console.save: No data found!') return; } if(!filename) filename = 'console.json' if(typeof data === "object"){ data = JSON.stringify(data, undefined, 4) } var blob = new Blob([data], {type: 'text/json'}), e = document.createEvent('MouseEvents'), a = document.createElement('a') //var text = await blob.text() a.download = filename a.href = window.URL.createObjectURL(blob) a.dataset.downloadurl = ['text/json', a.download, a.href].join(':') e = new MouseEvent ("click"); //e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null) !!!deprecated!!! a.dispatchEvent(e) } })(console) // 分配记录收集方法 function collectItems(){ var productIDs = document.getElementsByClassName('product-id'); var productSubjects = document.getElementsByClassName('product-subject'); var result=[]; for (var i = 0; i < productIDs.length; i++) { console.log(productIDs[i].innerText,productSubjects[i].firstChild.href); result.push({ 'productID':productIDs[i].innerText, 'productURL':productSubjects[i].firstChild.href, 'productType':productIDs[i].parentNode.parentNode.parentNode.parentNode.childNodes[2].innerText, 'productLevel':productIDs[i].parentNode.parentNode.parentNode.parentNode.childNodes[6].innerText, }); } return result; } //与元数据块中的@grant值相对应,功能是生成一个style样式 GM_addStyle('#down_contacts_btn{color:#fb7d3c;}'); //下载按钮的html代码 var down_btn_html = '<span>'; down_btn_html += '<a href="javascript:void(0);" id="down_contacts_btn" class="S_txt2" title="一直点击,直到翻页到最后一页,自动下载,若无效请刷新重试">导出产品信息</a>'; down_btn_html += '</span>'; var inner = document.createElement('span'); inner.innerHTML = down_btn_html; //将以上拼接的html代码插入到网页标签中 var ul_tag = document.getElementsByClassName('manage-app-market-status-selector')[0].parentNode; console.log('ul_tag') console.log(ul_tag) if (ul_tag) { ul_tag.append(inner); } var btn = document.getElementById('down_contacts_btn'); btn.onclick = function(){ if (repeated) { confirm('请刷新页面后重试'); return; } if(downloaded) { repeated = true; return;//防抖,防止多次下载,刷新重启 } var nextBtns = document.getElementsByClassName('next-pagination-item'); var n = nextBtns.length-1; if (nextBtns[n].innerText != '下一页') { n = n-1; } console.log(nextBtns[n]); var nextBtn = nextBtns[n] if(!nextBtn.disabled) { console.log('next page'); let result = collectItems(); globalAllresult.push(result); nextBtn.click(); }else{ console.log('page end'); let result = collectItems(); globalAllresult.push(result); globalAllresult = [].concat(...globalAllresult); console.save(globalAllresult,"ProductsInfo.json"); downloaded = true; } // 下载数据,第一个参数是数据对象,第二个参数是要保存成文件的名字。 }
2022年05月27日
3 阅读
0 评论
0 点赞
2022-05-27
Tampermonkey阿里巴巴国际站批量导出之[询盘国家]
// ==UserScript== // @name 阿里巴巴国际站批量导出询盘国家或垃圾询盘 // @namespace http://tampermonkey.net/ // @version 0.0.3 // @description 在询盘页面,搜索按钮后面插入一个下载按钮,点击可以从头开始记录每个客户的分配记录,最终输出成JSON文件自动下载。 // @author Mike // @icon http://is.alicdn.com/favicon.ico // @match https://message.alibaba.com/message/* // @grant GM_addStyle // ==/UserScript== 'use strict'; var globalAllresult = []; var downloaded = false; var repeated = false; var pages = 0; // 下面这段代码生成下载方式 (function(console){ console.save = function(data, filename){ if(!data) { console.error('Console.save: No data found!') return; } if(!filename) filename = 'console.json' if(typeof data === "object"){ data = JSON.stringify(data, undefined, 4) } var blob = new Blob([data], {type: 'text/json'}), e = document.createEvent('MouseEvents'), a = document.createElement('a') //var text = await blob.text() a.download = filename a.href = window.URL.createObjectURL(blob) a.dataset.downloadurl = ['text/json', a.download, a.href].join(':') e = new MouseEvent ("click"); //e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null) !!!deprecated!!! a.dispatchEvent(e) } })(console) // 分配记录收集方法 function collectItems(){ var inquiryIds = document.getElementsByClassName('spec-inquiry-id'); var inquiryFlags = document.getElementsByClassName('ui2-flag'); //var levels = document.getElementsByClassName('aui-icon-buyer-level'); var customers = document.getElementsByClassName('spec-icon-wrap'); var result=[]; for (var i = 0; i < inquiryIds.length; i++) { console.log(inquiryIds[i].innerText,inquiryFlags[i].title); //console.log(levels[i]) var customer = customers[i].childNodes[3].src; console.log(customer) result.push({ 'inquiryId':inquiryIds[i].innerText, 'inquiryFlag':inquiryFlags[i].title, 'customer':customer }); } return result; } //与元数据块中的@grant值相对应,功能是生成一个style样式 GM_addStyle('#down_contacts_btn{color:#fb7d3c;}'); //下载按钮的html代码 var down_btn_html = '<span>'; down_btn_html += '<a href="javascript:void(0);" id="down_contacts_btn" class="S_txt2" title="一直点击,直到翻页到最后一页,自动下载,若无效请刷新重试">导出询盘国家</a>'; down_btn_html += '</span>'; var inner = document.createElement('span'); inner.innerHTML = down_btn_html; var down_input_html = '<span>'; down_input_html += '<input type="text" id="down_input" placeholder="页数" class="ui2-pagination-goto"</input>'; down_input_html += '</span>'; var inner_input = document.createElement('span'); inner_input.innerHTML = down_input_html; //将以上拼接的html代码插入到网页标签中 var ul_tag = document.getElementsByClassName('ui-dropdown-btn')[0].parentNode; console.log('ul_tag'); //console.log(ul_tag); if (ul_tag) { ul_tag.append(inner_input); ul_tag.append(inner); } var btn = document.getElementById('down_contacts_btn'); var type = document.getElementsByClassName('ui-dropdown-btn')[0].innerText btn.onclick = function(){ if (repeated) { confirm('请刷新页面后重试'); return; } if(downloaded) { repeated = true; return;//防抖,防止多次下载,刷新重启 } var nextBtn = document.getElementsByClassName('next')[0]; console.log(nextBtn); var ipt = document.getElementById('down_input').value; console.log('ipt:',ipt); if (undefined == nextBtn || (ipt-1) == pages){ console.log('没了'); let result = collectItems(); globalAllresult.push(result); globalAllresult = [].concat(...globalAllresult); if (type.indexOf('分配给') != -1) { console.save(globalAllresult,"InquiryCountry.json"); }else{ console.save(globalAllresult,"InquirySpam.json"); } downloaded = true; }else{ console.log('next page'); pages += 1 console.log('pages:',pages); let result = collectItems(); globalAllresult.push(result); nextBtn.click(); } }
2022年05月27日
5 阅读
0 评论
0 点赞
2022-05-25
Pandas常用函数之groupby()、agg()
import pandas as pd import numpy as np df = pd.DataFrame( data={ 'name': ['z_s', 'l_s', 'w_w', 'z_l', 'y_s', 'j_j', 'l_b', 'z_f', 'hs_q', 'lbl_k', 'qy_n', 'mg_n'], 'score': [100, 97, 98, 89, 67, 59, 29, 87, 78, 89, 88, 80], 'group': [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], 'cls': ['A', 'A', 'A', 'B', 'B', 'B', 'A', 'A', 'A', 'B', 'B', 'B'], 'height': [178.0, 180.0, 176.0, 182.0, 189.0, 190.0, 172.5, 175.0, 165.0, 160.0, 158.5, 159.0] }, index=['stu_' + str(i) for i in np.arange(1, 13, 1)] ) print('df:\n', df)Pandas分组聚合分组聚合统计各个班的最高的成绩:# 先按照班级进行分组,再统计各个组里面的成绩的最大值! ret = df.groupby(by=['cls'])['score'].max().reset_index() print('ret:\n', ret)多重行索引分组聚合统计各个班的各个小组的最高成绩# 先按照班级分组,再按照小组分组,最后统计各个小组内成绩的最大值 ret = df.groupby(by=['cls', 'group'])['score'].max() print('ret:\n', ret) print('index:\n', ret.index) # MultiIndex ---多重行索引 ret = ret.reset_index() # 重设索引 print(ret)对多列数据进行分组聚合统计各个班级的成绩、身高的平均值:# 按照班级分组,统计各个组内 成绩、身高的平均值 ret = df.groupby(by=['cls'])[['score', 'height']].mean().reset_index() print('ret:\n', ret)综合应用# 先按照班级分组、再按照小组分组---统计各个小组内的成绩的平均值、身高的平均值 ret = df.groupby(by=['cls', 'group'])[['score', 'height']].mean().reset_index() print('ret:\n', ret)聚合函数 agg统计成绩、身高的最大值、均值# 使用agg 方法 可以对多列数据一次性求出多个指标 ret = df.loc[:, ['score', 'height']].agg([np.max, np.mean]) print('ret:\n', ret)对多列数据统计不同的指标统计成绩的均值、同时统计身高的最大值# 使用agg 方法 可以对多列数据一次性求出多个指标 ret = df.agg({'score': [np.mean], 'height': [np.max]}) print('ret:\n',ret)对多列数据统计不同个数的指标统计成绩的均值、最大值、中位数 和 身高的均值# 使用agg 方法 可以对多列数据一次性求出多个指标 ret = df.agg({'score': [np.mean, np.max, np.median], 'height': [np.mean]}) print('ret:\n', ret)使用agg 方法也可以配合着 分组 对不同列、不同的数据、统计不同个数的 不同指标!ret = df.groupby(by=['cls']).agg({'height': [np.max,np.mean], 'score': [np.min]}) print('ret:\n', ret)agg调用 自定义函数ret = df.loc[:, 'score'].agg(lambda x: x + 1) print('ret1:\n', ret) def func_add_one(x): return x + 1 ret = df.loc[:, 'score'].agg(func_add_one) print('ret2:\n', ret) # 对多列 使用自定义函数 ret = df.loc[:, ['score', 'height']].agg(func_add_one) print('ret3:\n', ret)使用agg 调用numpy的统计指标# 统计所有同学成绩的和 ret = df.loc[:, 'score'].agg(np.sum) print('ret:\n',ret) print('type:\n',type(ret)) # # 统计所有同学 成绩以及身高 的和 ret = df.loc[:, ['score', 'height']].agg(np.sum) print('ret:\n', ret) print('type:\n',type(ret)) # 统计身高 + 成绩(无意义的,只是为了演示能够 同一行相加) ret = df.loc[:, ['score', 'height']].agg(np.sum, axis=1) # 使用axis指定相加的方向 print('ret:\n', ret) print('type:\n',type(ret))
2022年05月25日
7 阅读
0 评论
0 点赞
1
...
28
29
30
31