如何利用pandas将时间戳格式化日期字符串呢?

Python139

如何利用pandas将时间戳格式化日期字符串呢?

原创

CorwinPC博主文章分类:Python ©著作权

文章标签 python 开发语言 后端 字符串 格式化日期 文章分类 Python 后端开发

©著作权归作者所有:来自51CTO博客作者CorwinPC的原创作品,请联系作者获取转载授权,否则将追究法律责任

如何利用pandas将时间戳格式化日期字符串呢?

例如:将 1357295797 转为 2013-01-04 10:36:37

#!/usr/bin/python# -*- coding: UTF-8 -*-"""@author: Roc-xb"""import pandas as pdif __name__ == '__main__':    items = [[1357295797, 1367633260, 1368633260], [1357295797, 1367633260, 1368633260]]    df = pd.DataFrame(items, columns=['atime', 'btime', 'ctime'])    print(df)    # 同时保留日期和时间    df['atime'] = pd.to_datetime(df['atime'], unit='s')    # 只保留时间    df['btime'] = pd.to_datetime(df['btime'], unit='s').dt.time    # 只保留日期    df['ctime'] = pd.to_datetime(df['ctime'], unit='s').dt.date    print(df)

运行截图:

如何利用pandas将时间戳格式化日期字符串呢?

  • 收藏
  • 评论
  • *举报

上一篇:c语言判断输入类型是否为指定类型?

下一篇:pandas根据索引删除dataframe列

Original: https://blog.51cto.com/YangPC/5483035
Author: CorwinPC
Title: 如何利用pandas将时间戳格式化日期字符串呢?



相关阅读1

Title: 【Django | 开发】面试招聘网站(增加csv,excel导出&企业域账号集成&日志管理功能)

如何利用pandas将时间戳格式化日期字符串呢?

🤵‍♂️ 个人主页: @计算机魔术师 👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。

🌐 推荐一款找工作神器网站: ​​牛客网🎉🎉|笔试题库|面试经验|实习招聘内推 ​​​ 还没账户的小伙伴 ​​​速速点击链接跳转牛客网登录注册​​ 开始刷爆题库,速速通关面试吧🙋‍♂️

该文章收录专栏 ✨---【Django | 项目开发】从入门到上线 专栏---✨

@[toc]

一、实现excel表格导入数据(命令行工具)

  • HR需要人肉输入应聘者数据,非常枯燥和耗时,所以我们进行产品的 第二次迭代-- 实现候选人数据的导入

在应用​ ​interview​​​创建​ ​managment​​​文件以及该目录下​ ​command​​​文件,创建​ ​import_candidate.py​​进行脚本操作、

需要存入的数据

如何利用pandas将时间戳格式化日期字符串呢?

  • ​import_candidates.py​​ (这里选择使用pandas读取数据)
import pandas as pdfrom django.core.management import BaseCommandfrom interview.models import Candidate# python manage.py import_candidates --path file.csvclass Command(BaseCommand):    help = '从一个csv导入数据,并存贮到数据库'    # 添加一个长命令 Linux中 -- 表示长命令    def add_arguments(self, parser):        parser.add_argument('--path', type=str)  # 所接受参数为一个字符串    # 处理逻辑    def handle(self, *args, **options):        path = options['path']  # 从命令行参数读取 path 存贮的路径        # with open(path, 'r', encoding='gbk') as f:        #     reader = csv.reader(f, dialect='excel')        #     for row in reader:        #         print(row[0])        candidate_data = pd.read_csv(path, encoding='gbk', )        for row in range(len(candidate_data)):            data = list(candidate_data.iloc[row, :])            print()            # 创建对象不能Candidate()这是一个类实例,需要通过objects 对象来与数据库交互            candidate = Candidate.objects.create(                user_name=data[0],                city=data[1],                phone=data[2],                bachelor_school=data[3],                major=data[4],                degree=data[5],                test_score_of_general_ability=data[6],                page_score=data[7]            )            candidate.save()
  • 命令行输入
python manage.py import_candidates --path ~/应聘者数据.csv

如何利用pandas将时间戳格式化日期字符串呢?

如何利用pandas将时间戳格式化日期字符串呢?

此时HR非常开心,不用一个一个录入候选人,我们的第二轮开发实现,接下来我们实现 列表查询和筛选

二、列表查询和筛选&页面再优化

希望能通过快速筛选得到数据,要求如下

如何利用pandas将时间戳格式化日期字符串呢?

​Django官方文档 关于AdminModel 的选项​​强烈建议看官方文档,比任何教程都要强

  • ​admin.py​​ 文件
from django.contrib import adminfrom interview.models import Candidate# Register your models here.@admin.register(Candidate)class CandidateAdmin(admin.ModelAdmin):    list_display = ('user_id', 'user_name', 'first_result', 'second_result', 'hr_result', 'create_time', 'modify_time')    # 定义集合的字段列表    fieldsets = (        # 第一个元素表示分组展现的名字,第二元素是一个map        (None, {'fields': ("user_id", ("user_name", "email", "gender", "phone",),                           ("apply_position", "degree"),                           ("city", "born_address"),                           ("doctor_school", "bachelor_school", "master_school", "major",), ("page_score",                                                                                             "test_score_of_general_ability",                                                                                             "candidate_remark",),                           ), }),        ('第一轮面试', {'fields': ("first_score", "first_result", "second_interviewer",                              ), 'classes': ('collapse',), "description": '请由面试官输入该信息'}),        ('第二轮面试', {'fields': ("second_score", "second_result", "first_interviewer",                              ), 'classes': ('collapse',), "description": '请由面试官输入该信息'}),        ('第三轮面试', {'fields': ("hr_score", "hr_result", "hr_interviewer",                              ), 'classes': ('collapse',), "description": '请由面试官输入该信息'})    )    list_editable = ('user_id',)  # 可直接在页面修改的数据    list_display_links = ('user_name',)  # 默认为第一个columns 不想要设置为None 超链接跳转到form表单    list_per_page = 10  # 每个页面显示多少条数据    # list_max_show_all = 5 每个页面点击show_all最多显示数据    list_filter = ('first_result', 'second_result', 'hr_result')  # 按照成绩筛选名字    # list_select_related = ('user_name', 'first_result')    # readonly_fields = ( 'modify_time',) # in_list_page non-editable and readonly    # save_as = True  # 将 save_and_add_another  replace to save_as    search_fields = ('user_name', 'first_result', 'second_result', 'hr_result',)  # 设置可搜索内容    ordering = ('hr_result', 'second_result','first_result' ,)  # 默认按照成绩排序好
  • 效果:

三、企业域账号集成

目的:省去多余的账号管理(每个人都要注册一个账号,过于麻烦)

如何利用pandas将时间戳格式化日期字符串呢?

  • LDAP 成员页面
  • 在服务器的服务

1) 安装应用

pip install django-python3-ldap

如何利用pandas将时间戳格式化日期字符串呢?

  • 在​ ​setting.py​​应用将app加进来
  • ​OpenLDAP​​设置

这样用户可以有两个账号,一个是使用LDAP账号,一个是admin账号,每个员工登陆一下时会需要在每次登录自动录入账号到​ ​user​​群,但却由于显示非员工无法登录,需要在admin后台修改其为员工然后登录,但是这样需要一个一个登录,效率低下

  • 解决:通过​ ​manage​​脚本导入用户信息

​python manage.py ldap_sync_users​

如何利用pandas将时间戳格式化日期字符串呢?

2) 设置面试官和HR权限(群组)

如何利用pandas将时间戳格式化日期字符串呢?

  • HR的管理页面

四、添加导出为csv功能

如何利用pandas将时间戳格式化日期字符串呢?

  • 添加action,指向不同函数进行处理

​操作函数​

import csvfrom datetime import datetime# 注册为 action@admin.action(description='导出为csv文件')def export_model_as_csv(modeladmin, request, queryset):    # 告诉浏览器以附件处理    response = HttpResponse(content_type="text/csv")    field_list = ['user_name', 'first_result', "first_interviewer", 'second_result', "second_interviewer",                  'hr_result', "hr_interviewer", 'modify_time']    # attachment 类型是附件 名字为 ""(为字符串,需要单双引号)    response['Content-Disposition'] = 'attachment; filename= "recruitment_candidate_list_%s.csv"' % (        datetime.now().strftime('%Y-%m-%d,%H-%M-%S')    )    # candidate_list = pd.DataFrame(columns=columns)    # _meta 是一个Options对象 有get_filed and get_fields 两个方法,得到对象关键字的大写    writer = csv.writer(response)    writer.writerow([queryset.model._meta.get_field(f).verbose_name.title() for f in field_list])    # columns_name = [queryset.model._meta.get_field(f).verbose_name.title() for f in columns]    for obj in queryset:        ## 单行记录        csv_line_values = []        for field in field_list:            field_object = queryset.model._meta.get_field(field)            field_values = field_object.value_from_object(obj)            csv_line_values.append(field_values)        writer.writerow(csv_line_values)    return response

在​ ​adminmodel​​​类中引入​ ​action​

@admin.register(Candidate)class CandidateAdmin(admin.ModelAdmin):    list_display = (        'user_id', 'user_name', 'first_result', "first_interviewer", 'second_result', "second_interviewer", 'hr_result',        "hr_interviewer", 'modify_time')    # import actions to use    actions = [export_model_as_csv, ] ···
  • 效果

六、添加excel导出功能(样式)

此时HR需要能够导出一个具有好看样式的表格,可以 统计S分数的候选人,此时我们使用python中处理excel表格文件的三板斧 ​ ​xlrd ​​​ - ​ ​xlwt​​​ - ​ ​xlutils​

  • 在需要导入excel文件,我们可以用​ ​xlrd​​​-​ ​xlutils​​​-​ ​xlwt​​​,通过​ ​xlutils​​​将​ ​book​​​转换为​ ​workbook​​ ,进行读写操作

这里现在只需要用到​ ​xlrt​

def setStyle(name, height=200, font_color=256, background_color=0x40, background=False, bold=False, align=True,             border=False, border_size=1):    """    xlwt样式写入设置    """    style = xlwt.XFStyle()  # 初始化样式    if background:        # 创建背景模式对像        pattern = xlwt.Pattern()        # 固定样式        pattern.pattern = xlwt.Pattern.SOLID_PATTERN  # May be: NO_PATTERN, SOLID_PATTERN, or 0x00 through 0x12        pattern.pattern_fore_colour = background_color  # 设置模式颜色 May be: 8 through 63. 0 = Black, 1 = White, 2 = Red, 3 = Green, 4 = Blue, 5 = Yellow, 6 = Magenta, 7 = Cyan, 16 =        # Maroon, 17 = Dark Green, 18 = Dark Blue, 19 = Dark Yellow , almost brown), 20 = Dark Magenta, 21 = Teal, 22 = Light Gray, 23 = Dark Gray, the list goes on...        style.pattern = pattern    font = xlwt.Font()  # 为样式创建字体    # 字体类型:比如宋体、仿宋也可以是汉仪瘦金书繁    font.name = name    # 设置字体颜色    font.colour_index = font_color    # 字体大小    font.height = height    # 字体加粗    font.bold = bold    # 定义格式    style.font = font    if border:        # 框线        borders = xlwt.Borders()        borders.left = border_size        borders.right = border_size        borders.top = border_size        borders.bottom = border_size        style.borders = borders    # 细实线:1,小粗实线:2,细虚线:3,中细虚线:4,大粗实线:5,双线:6,细点虚线:7    # 大粗虚线:8,细点划线:9,粗点划线:10,细双点划线:11,粗双点划线:12,斜点划线:13    if align:        # 设置单元格对齐方式        al = xlwt.Alignment()        # 0x01(左端对齐)、0x02(水平方向上居中对齐)、0x03(右端对齐)        al.horz = 0x02        # 0x00(上端对齐)、 0x01(垂直方向上居中对齐)、0x02(底端对齐)        al.vert = 0x01        style.alignment = al    return style# 注册为 action@admin.action(description='导出为excel文件')def export_model_as_excel(modeladmin, request, queryset):    # 告诉浏览器以附件处理    response = HttpResponse(content_type='application/vnd.ms-excel')    field_list = ['user_name', 'first_result', "first_interviewer", 'second_result', "second_interviewer",                  'hr_result', "hr_interviewer", "modify_time"]    # attachment 类型是附件 名字为 ""(为字符串,需要单双引号)    response['Content-Disposition'] = 'attachment; filename= "recruitment_candidate_list_%s.xlsx"' % (        datetime.now().strftime('%Y-%m-%d,%H-%M-%S')    )    # 使用 xlwt 生成表格    title = ['应聘候选人信息']    wb = xlwt.Workbook(encoding='utf-8')  # 创建一个excel  #ascii'可视为'utf-8'的一部分,so用'utf-8'更好    ws = wb.add_sheet('候选人')  # 新建一个工作表    ws.write_merge(0, 1, 0, len(field_list) - 1, title, style=setStyle('微软雅黑', height=200, font_color=256,  bold=True, border=True, border_size=1))    for col, name in enumerate(field_list):  # 变为枚举类型,默认从0开始,        ws.write(2, col, queryset.model._meta.get_field(name).verbose_name.title(), style=setStyle('微软雅黑', height=200, font_color=0x40, background=True, background_color=0x4682B4))    row = 3  # 从第三行开始    # style_date = xlwt.XFStyle()    # style_date.num_format_str = 'M/D/YY h:mm'    S_sum = 0    for obj in queryset:        columns = 0        # # 单行记录        for field in field_list:            field_object = queryset.model._meta.get_field(field)            field_values = field_object.value_from_object(obj)            logger.warning(type(field_values))            if type(field_values) == type(datetime.today()):  # 判断是否为datetime数据类型,并指定数据为时间格式                field_values = field_values.strftime('%Y/%m/%d,%H:%M:%S')                ws.write(row, columns, field_values)            else:                # 累加S级别人数                if field_values == 'S':                    S_sum += 1                ws.write(row, columns, field_values)            columns += 1        # 时间行宽增大        row += 1    ws.col(columns - 1).width = 5000    ws.col(columns - 2).width = 5000    ws.write(row + 2, len(field_list) - 2, '终面S级别人数:', setStyle(name='仿宋', bold=True))    ws.write(row + 2, len(field_list) - 1, S_sum)    logger.warning('{} exported {} candidate records'.format(request.user, len(queryset)))    wb.save(response)  # 保存到文件类对象    return response
  • 导出样式

如何利用pandas将时间戳格式化日期字符串呢?

五、记录日志以方便排查问题

1) 项目配置

  • 记录详细的日志信息可以快速排查问题

和​ ​python​​​格式一样,使用 ​ ​dictConfig​​格式来定义日志信息,在处理级别时是按照 过滤原则,​ ​handler​处理其级别信息上传到记录器 记录器再根据自身级别 过滤上传root再过滤

在项目的​ ​setting.py​​文件中进行如下配置

# log recordLOGGING = {    'version': 1,  # 必须    "disable_existing_loggers": False,  # 设置其他日志同时记录    'handlers': {        'console': {  # handler 名称(表示控制台输出)            "class": "logging.StreamHandler",  # 在控制台流 类            'formatter': 'simple',            'level': 'INFO'        },        'file': {  # handler 名称 (表示文件输出)            'level': 'INFO',            'class': 'logging.FileHandler',  # 文件流类            'formatter': 'simple',            # 得到完整路径并拼接            'filename': os.path.join(BASE_DIR, 'logs/debug.log'),        },    },    'formatters': {        # simple 类        'simple': {            'format': '%(asctime)s , %(name)s [ %(levelname)s ] %(message)s',        }    },    # 根日志记录器(父记录器)    'root': {        'handlers': ['console', 'file'],  # 记录到文件和控制台中        'level': 'INFO',    },    'loggers': {        'django': {            'handlers': ['file'],            'level': 'DEBUG',            'propagate': True,        }    }}
  • 运行服务器查看
python manage.py runserver 0.0.0.0:8000

如何利用pandas将时间戳格式化日期字符串呢?

2)在admin中配置python的logging模块

# 得到 当前日志记录对象# logging.basicConfig(level=logging.DEBUG,format="'%(asctime) %(name) %(levelname) %(message)")logger = logging.getLogger(__name__)    def ·······            ·······    # 输出 导出对象以及条数(只有warning以上才会被打印,可以自己配置)    logger.warning('{} exported {} candidate records'.format(request.user, len(queryset)))    return response

如何利用pandas将时间戳格式化日期字符串呢?

如何利用pandas将时间戳格式化日期字符串呢?

参考文献:​​Python 常用模块大全(整理)​​​​python的xlwt模块使用​

🤞到这里,如果还有什么疑问🤞    🎩欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🎩      🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳

Original: https://blog.51cto.com/u_15691039/5633436
Author: 计算机魔术师
Title: 【Django | 开发】面试招聘网站(增加csv,excel导出&企业域账号集成&日志管理功能)

相关阅读2

Title: python入门基础(5)--数值列表、切片及元组

列表也非常适合存储一组数字,尤其是大数据处理,处理的几乎都是由数字(如气温、距离、人口数量、经济等)组成的集合。

Python提供很多工具,在数据可视化中,可高效地处理数字列表。

一、数值列表

range() 让你能够轻松地生成一系列的数字

for value in range(1,6):
print(value)

显示结果为1,2,3,4,5

注意:函数 range(1:6)让Python从指定的第一个值开始数,并到达第二个值后停止,但不包含第二个值(这里为6)要打印数字1~10,需要使用 range(1,11) ,在使用range() 时,如果输出不符合预期,可尝试将指定的值加1或减1。
numbers = list(range(1,6)) # 要创建数字列表,可使用函数list()可将range()的结果直接转换为列表
print(numbers)

even_numbers = list(range(2,11,2)) #使用函数range(2,11,2)时,表从2开始数,然后不断地加2,直到达到或超过终值(11)
print(even_numbers)

squares = [] #定义一个空的squares列表
cube_squares = [] #定义一个空的cube_squares列表
for value in range(1,11): #从1开始,到11结束。注意value只能小于11,即10
square = value2 # 表示乘方 2,表示平方
cube_square = value
3 # **3,表示立方
squares.append(square) #方法append()表示列表尾增加元素。
cube_squares.append(cube_square)
print(squares) #循环结束后,打印出range(1,11)中1-10的平方
print(cube_squares) #打印出range(1,11)中1-10的立方

编写三四行代码来生成列表有点繁复时,可考虑创建列表解析,列表解析将for循环和创建新元素的代码合并成一行,编写一行代码就能生成这样的列表

new_squares = [value**2 for value in range(1,11)]
print(new_squares)

二、对数字列表执行简单的统计计算,先了解几个专门用于处理数字列表的Python函数。

print(min(squares)) #打印数列squares中最小值
print(max(squares)) #打印数列squares中最大值
print(sum(squares)) #打印数列squares中总和

三、切片

所谓切片,也即列表的一部分,Python称之为切片,即可指定要使用的第一个元素和最后一个元素间的任意索引。

names=['xiaozhan','caiyilin','huangxiaoyun','zhoushen','DAOlang','huangxiaoming']
print(names[0:3]) #提取列表第1个元素到第2个元素,注意小于第2个数字3,截止索引指定为2
print(names[1:4]) #提取列表第2个元素到第3个元素,注意小于第2个数字4,截止索引指定为3
print(names[2:]) #提取列表第3个元素到末尾的所有元素(注意第1个为0),可将起始索引指定为2 ,并省略终止索引
print(names[-3:]) #-3表示从列表倒数第3个元素到末尾的所有元素

遍历切片 遍历列表的部分元素,可在for循环中使用切片。在下面的示例中,我们遍历前三名人员,并打印他们的名字

print("Here are the first three names on my name list:")
for name in names[:3]: #提取列表第1个元素到第2个元素,注意小于第2个数字3,截止索引指定为2
print(name.title())
new_names = names[:] # names[:]中省略数字,表示全部
print("The used names list are:")
print(names) #打印原名单
print("\nThe new names list are:")
print(new_names) #打印复制的新名单

如何利用pandas将时间戳格式化日期字符串呢?

四、元组

列表适合存储在程序运行期间可能变化的数据集,列表中的值是可以修改的,使用方括号来标识,如上述的 names=['xiaozhan','caiyilin','zhoushen','DAOlang','huangxiaoming']
元组也是一种列表变量,运行过程中不可修改其中的任一元素,但可整体重新赋值,使用圆括号来标识,如first_names=('bush','lucy','jack')

names=['xiaozhan','caiyilin','zhoushen','DAOlang','huangxiaoming']
first_names=('bush','lucy','jack')
for first_name in first_names: #遍历元组中的所有值
    print(first_name)
print('\n') #间隔行
#修改元组变量
first_names=('zhao','qian','sun','li')   #重新对first_names进行赋值
for first_name in first_names: #遍历元组中的所有值
    print(first_name)# 测试()和[]能否修改元组中某个元素first_names(1)='chen'  #对元组first_names第2个位置修改为chen,程序不会正常运行first_names[0]='chen'  #对元组first_names第1个位置修改为chen,程序不会正常运行如下图运行结果:

Original: https://www.cnblogs.com/codingchen/p/16127570.html
Author: PursuitingPeak
Title: python入门基础(5)--数值列表、切片及元组

相关阅读3

Title: 在windows上搭建Python开发环境

安装Windows版本Pyhton

开始下载

1、进入Python官网下载,下载网站:​​https://www.python.org/downloads/​

2、点击下载Download Python 3.10.5

如何利用pandas将时间戳格式化日期字符串呢?

开始安装

1、双击运行安装

如何利用pandas将时间戳格式化日期字符串呢?

如何利用pandas将时间戳格式化日期字符串呢?

如何利用pandas将时间戳格式化日期字符串呢?

如何利用pandas将时间戳格式化日期字符串呢?

如何利用pandas将时间戳格式化日期字符串呢?

2、安装完成后CMD输入python -v验证下

如何利用pandas将时间戳格式化日期字符串呢?

集成开发环境PyCharm社区版安装

PyCharm下载

1、进入官网下载:​​https://www.jetbrains.com/pycharm/download/#sectinotallow=windows​

如何利用pandas将时间戳格式化日期字符串呢?

PyCharm安装

1、下载完成后双击运行安装

如何利用pandas将时间戳格式化日期字符串呢?

如何利用pandas将时间戳格式化日期字符串呢?

如何利用pandas将时间戳格式化日期字符串呢?

如何利用pandas将时间戳格式化日期字符串呢?

如何利用pandas将时间戳格式化日期字符串呢?

2、安装完成打开使用PyCharm,没有配置文件的不用导入,先根据提示学习下基本操作

如何利用pandas将时间戳格式化日期字符串呢?

如何利用pandas将时间戳格式化日期字符串呢?

如何利用pandas将时间戳格式化日期字符串呢?

如何利用pandas将时间戳格式化日期字符串呢?

3、安装 PyCharm 中文插件,打开菜单栏 File,选择 Settings,然后选 Plugins,点 Marketplace,搜索 chinese,然后点击 install 安装:

如何利用pandas将时间戳格式化日期字符串呢?

如何利用pandas将时间戳格式化日期字符串呢?

写第一个程序

1、新建Python文件helloworld

如何利用pandas将时间戳格式化日期字符串呢?

如何利用pandas将时间戳格式化日期字符串呢?

2、输入以下代码:

#!/usr/bin/python3print("Hello, World!")

如何利用pandas将时间戳格式化日期字符串呢?

如何利用pandas将时间戳格式化日期字符串呢?

Original: https://blog.51cto.com/u_1179220/5559717
Author: 沉默亦有声
Title: 在windows上搭建Python开发环境