pandas 操作--Excel

本文主要在操作Excel过程中,pandas的一些使用方法。

  • 读Excel
  • 操作DataFrame
  • 写Excel

1、读Excel

读Excel的时候,可以像这样:

import pandas as pd
df_subject = pd.read_excel(‘file.xls’, sheet_name='科目', dtype={'日期': datetime.datetime})

# filename : Excel的文件,可以是包含绝对路径,也可以只是文件名

需要额外注意下,读xls格式的,调用的是xlwt库,读xlsx,调用的openpyxl库。所以如果读xlsx格式的数据时报找不到openpyxl模块,那就装一下咯。

read_excel(),也是有一堆参数可选,我把我用过的加个注释:

def read_excel(io,
               sheet_name=0, # 要读取的sheet页的名字,或index
               header=0,
               names=None, # 指定每列的类名,list
               index_col=None,
               parse_cols=None,
               usecols=None,
               squeeze=False,
               dtype=None, # 指定某列的类型,{'col_name_1': str, 'col_name_2': int}
               engine=None,
               converters=None, # 与dtype 类似,但是没看懂 ==
               true_values=None,
               false_values=None,
               skiprows=None, # 跳过几行,再开始读数据
               nrows=None,
               na_values=None,
               keep_default_na=True,
               verbose=False,
               parse_dates=False,
               date_parser=None,
               thousands=None,
               comment=None,
               skip_footer=0,
               skipfooter=0,
               convert_float=True,
               mangle_dupe_cols=True,
               **kwds):
    ...

读出来的数据,就是pandas的DataFrame格式的数据,就可以方便的为所欲为了~~

2、操作DataFrame

2.1 判断DataFrame中是否有缺失值(NaN):

nan_res_exam = df_exam.isnull().any()

isnull(),返回一个DataFrame,标记原来DataFrame中那个值为NaN。

后边再加上any(),返回一个Series,标记没列是否有NaN,有为True,没有False。

2.2 遍历Series

# Series 的结构类似字典,key是自动添加的索引
for idx in series_1.index:
    print(series_1[idx]) 

2.3 遍历DataFrame

# 逐行遍历
# index,行号;row,每行的数据,Series
for index, row in df_test.iterrows():
    print(row.get('key', None))
    print(row['key'])

# 逐列遍历
# index,列名;col,每列的数据,Series
for index, col in df_test.iteritems():
    print(col.get('key', None))
    print(col['key'])

2.4 判断Nan

读取出来的值包含Nan时,便于后续程序,常把它转成 0 或者的什么数,这个时候就需要判断一下这个值是不是Nan,怎么办呢。。(后两种方法都不灵~)

if score != score:  # OK
    score = 0
if score is Nan:  # no work
    score = 0
if score == None:  # no work
    score = 0

2.5 按列排序(单列,多列)

把二维的DataFrame的数据,按照某列,或者某几列排序,是个比较常见的需求吧。比如有下面这个数据:

学生班级总成绩
小明156
小红266
小丽176
小刚150
小黑242

 

 

 

 

 

 

 

如果把这个作为结果交上去,估计领导是不会满意的,产品经理也饶不了你啊~

#################################### 多列排序
# df_score 代表上表数据的DataFrame
# sort_values() 排序函数
# by 指定排序的列名 list
# ascending 是否是升序 list(与by中的是对应的)
# inplace 是否用排序后的数据替换原有数据
df_score.sort_values(by=['班级', '总成绩'], ascending=[True, True], inplace=True)

#################################### 单列排序
# 默认是升序
df_score.sort_values(‘班级’, inplace=True)

3、写Excel

写的时候主要分两步:1,初始化DataFrame对象;2,调用 to_excel() 函数

# data_list: [['小明', '1', '56'], [], []]
# col_list: ['学生', '班级', '总成绩']
pd_score = pd.DataFrame(data_list, columns=col_list)
work = pd.ExcelWriter(data_path)
pd_score.to_excel(work, 
                  sheet_name='成绩', 
                  index=False,       # 是否保留DataFrame的行索引,一般去掉
                  columns=col_list,  # 列名,不指定就默认是pd_score中指定的列名,也可以只写入pd_score的某几列
                  startcol=0,        # 在Excel中开始写数据的行,从0开始,
                  startrow=0         # 同上,这就允许在一个sheet页中写入多个DataFrame
                  ...)

在这两步中,需要注意的是:

a,data_list ,相当于一个二维的list,其中每一个list元素的个数与列名列表的个数一致

b,to_excel() 中的参数还有很多,此处只列了比较常用的

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值