jupyter-pandas处理excel

    视频课程

1、(按H/h键 展示快捷键帮助)Jupyter笔记本有两种不同的键盘输入模式. 编辑模式允许您将代码或文本输入到一个单元格中,并通过一个绿色的单元格来表示 命令模式将键盘与笔记本级命令绑定在一起,并通过一个灰色的单元格边界显示,该边框为蓝色的左边框。

命令模式 (按键 Esc 开启)快捷键:

Enter : 转入编辑模式

Esc:进入command模式

Shift-Enter : 运行本单元,选中下个单元

Ctrl-Enter : 运行本单元

Alt-Enter : 运行本单元,在其下插入新单元

Y : 单元转入代码状态

M :单元转入markdown状态

R : 单元转入raw状态

A:在上方增加一个cell

B:在下方增加一个cell

Tab:代码补全

2、Pandas使用xlsxwriter引擎保存数据,可给数值列设置特定的格式

https://blog.csdn.net/pdcfighting/article/details/112342919

3、dataframe:

df.loc:用 标签索引定位

df.iloc[行,列]:用position定位

df.ix:新版本遗弃

df.loc[df['sex']=='male','age'].mean() 统计

df.loc[(df['终止时间']==20200501)].count()

df.groupby('终止时间')['起飞'].value_counts()

(df.groupby('终止时间').count())['机型'].sum()

low = datetime(2021,3,27) //大于指定日期的所有记录

df.loc[(df['结束日期']>=low)]

//Pandas日期数据处理:如何按日期筛选、显示及统计数据

https://www.cnblogs.com/lemonbit/p/6896499.html  

4、df = pd.read_excel(r"./data/202010221216(初始数据).xls",

                   sheet_name=0,header=0,

                    usecols='A,C:E',            // 读入excel 选定的列A,C,D,E,也可以通过传列表[' 航班号',' STD']指定列名

                   dtype={ '航班号':"string",  //字典: str也是object类型,string是字符串类型

                           '执行日期':"period[D]",   // 时间周期 period[Y]只显示年, period[D]显示年月日

                          "开始日期":"period[D]",

                          "STD":"string",

                          "STA":"string",

                          "结束日期":"period[D]"})

dtype尽量人工指定,避免使用object混合对象 类型,因为类型不确定,影响后续使用对应函数处理。

usecols建议使用字符串列表,可读性高,增减列不影响,技巧,从excel拷贝列名,然后执行: '航站1 离站1 到达2 航站2 离站2 '.split() 得到 字符串列表

usecols=['航站1', '离站1', '到达2', '航站2', '离站2']

parse_dates =[' 执行日期',' 结束日期']   ,通过 列表( 或字典,指定列名) 指定解析成日期格式的列;设置为 True,尝试将索引解析成 日期格式datetime64

任务性质 航班号 机型 机号 任务分类 起飞 STD STA 落地 执行日期 班期 开始日期 结束日期
0 N AZG085 B747 VQBVB H/Y UBBB 1645 0005 ZHCC 2020-11-01 7 2020-10-31 2020-11-01

with pd.ExcelWriter('./data/bydateplan.xls',

                  date_format='YYYY-MM-DD',

                  datetime_format='YYYY-MM-DD HH:MM:SS') as writer:    // ' YYYY-MM-DD'只显示年月日

    df.to_excel(writer, sheet_name='Sheet1', index=False)

writer.save()

*使用 datetime_format,避免写入 excel日期格式是“ 2018-12-08 00:00:00” ,而是“2018-12-08”;例如datetime_format='HH:MM',写入excel格式为“10:54“

5、解析STD/STA的时分格式。

1)df = pd.read_excel(r"./data/test.xls",

                   parse_dates=[0],

                   date_parser=lambda x:pd.to_datetime(x,format='%Y年%m月%d日 %I时%M分%S秒'))

date_parser是 function,解析日期格式的函数;将“2018年12月08日 10时54分34秒”解析成“ 2018-12-08 10:54:34

2)df = pd.read_excel(r"./data/test.xls",

                   parse_dates=[4],

                   date_parser=lambda x:pd.to_datetime(x,format='%I%M%S'))

将“111200”解析成“ 1900-01-01 11:12:00

3)df = pd.read_excel(r"./data/test.xls",

                   parse_dates=[1],

                   date_parser=lambda x:pd.to_datetime(x,format='%Y年%m月%d日'))

将“2020年02月15日 10时54分34秒”解析成“ 2020-02-15

4)df = pd.read_excel(r"./data/test.xls",

                   parse_dates=[4],

                   date_parser=lambda x:pd.to_datetime(x,format='%I%M'))

将“1112”解析成“ 1900-01-01 11:12:00 ”, 但是对于“1830”解析报错,怎么能识别24小时制?

——将 format='%I%M'改为 format='%H%M',则解析24小时。

%H

Hour (24-hour clock) as a zero-padded decimal number.

00, 01, …, 23

(9)

%I

Hour (12-hour clock) as a zero-padded decimal number.

01, 02, …, 12


6、读取excel时去除多余的“空格/回车/换行”符

1)df = pd.read_excel(r"./data/外国及港澳台地区公司正班落地航班计划.xls")

      航班号      机型      班期     有效期起始   有效期截止
        74N/74Y  \t.....6.\t  20200329  20201024

2)df = pd.read_excel(r"./data/外国及港澳台地区公司正班落地航班计划.xls", 不能选择多列处理。

                  converters={'航班号':lambda x: x.strip()})

或者:

df = pd.read_excel(r"./data/外国及港澳台地区公司正班落地航班计划.xls", 能指定多列处理。

                  converters={'航班号':str.strip,'班期':str.strip})

      航班号   机型      班期    有效期起始  有效期截止
        74N/74Y  \t.....6.\t  20200329  20201024

7、int64类型( '数字代码')需先转换为str类型,再转换为string类型:df['数字代码']= df['数字代码']. astype('string')

8、Python datetime模块中strptime和strftime的区别:

strptime:
p表示parse,表示分析的意思,所以strptime是给定一个时间字符串和分析模式,返回一个 时间对象
strftime:
f表示format,表示格式化,和strptime正好相反,要求给一个时间对象和输出格式,返回一个时间 字符串, 并按照给定的格式打印, 时间格式的书写可参照链接:

9、 DataFrame中一个 批量数据替换

df['有效期截止'].replace(to_replace = 20201022 ,value = 20200405 ,inplace=True)

10、删除不用的列

df.drop(['到达4','航站4'],axis=1,inplace=True)

11、 存在nan值的情况,需要先进行判断找出这样的值再进行分情况处理

def turn0(conf):

    if pd.isnull(conf):

        return "0"

    else:

        return conf

df['航班性质'] = df.apply(lambda x:turn0(x['航班性质']),axis = 1)

航班性质 对应“是否外航,需要转换为0/1

df['航班性质'] = df['航班性质'].apply(lambda x:"0" if '外机' not in x else "1")

12、修改列名:

df.rename(columns={'航班性质':'是否外航','创建人':'修改','航路1':'航路','航季':"季度","起飞":"起飞机场","落地":"落地机场",

                  "STD":"预起时间","STA":"预落时间","开始日期":"开始时间","结束日期":"结束时间","班期":"日期"},inplace=True)

分类统计: df.groupby('结束日期')['结束日期'].value_counts()

13、保存为xls文件

with pd.ExcelWriter('./data/bydateplan.xls',

                  date_format='YYYY-MM-DD',

                  datetime_format='YYYY-MM-DD HH:MM:SS') as writer:

    df.to_excel(writer, sheet_name='MHATC', index=False,header=True,

                columns=["航班号","机型","任务性质","起飞机场","落地机场","预起时间","预落时间","日期","开始时间","结束时间","季度","修改","备注","是否外航","航路"])

writer.save()

13、选择文件、文件夹对话框

import tkinter as tk

from tkinter import filedialog

root = tk.Tk()

root.withdraw()

Folderpath = filedialog.askdirectory() #获得选择好的文件夹

Filepath = filedialog.askopenfilename() #获得选择好的文件


请使用浏览器的分享功能分享到微信等