Pandas操作Excel学习笔记(2)——读取文件

通过Pandas库可以从多种格式的数据文件中读取数据,也可以将处理后的数据写入到这些文件中。pandas库中的pd.read_excel()相较之前的xlrd库的读表操作更加简单,针对一般批量的数据处理选择pandas库操作是不错的选择。

一、读取Excel文件的函数

  • 读取函数为:pd.read_excel(),函数的一些参数为:
pd.read_excel(io, sheet_name=0,header=0,skiprows=None,index_col=None,names=None,
                arse_cols=None,date_parser=None,na_values=None,thousands=None, 
                convert_float=True,has_index_names=None,converters=None,dtype=None,
                true_values=None,false_values=None,engine=None,squeeze=False,**kwds)

二、读取函数的相关参数

io

  • io指的是要读取的excel 文件存储路径.
  • 可以是绝对路径,也可以是相对路径。

sheet_name

  • sheet_name:sheet_name默认为0,即返回第一个工作表,返回多表使用sheet_name=[0,1]或sheet_name=["工作表1","工作表2"],若sheet_name= None是返回所有工作表 。
  • 注意:int/string返回的是DataFrame,而None和list返回的是dict of DataFrame。
  • 案例:
import pandas as pd
pd.read_excel("要打开的EXCEL文件.xlsx",
                sheet_name = 1)    # 读取EXCEL工作簿中的第二个工作表
pd.read_excel("要打开的EXCEL文件.xlsx",
                sheet_name = “二月”)    # 读取EXCEL工作簿中的工作表名为‘二月’的工作表
pd.read_excel("要打开的EXCEL文件.xlsx",
                sheet_name =None )    # 读取EXCEL工作簿中的所有工作表,是一个表格的字典。
df_dict = pd.read_excel("要打开的EXCEL文件.xlsx",
                sheet_name = [1,“二月”])  #读取EXCEL工作簿中的第二个工作表和表名为‘二月’的工作表
print(df_dict[1])
print(df_dict["二月"])

header

  • header :指定作为列索引的行(即通常说的标题行),默认0,即取第一行,数据为列名行以下的数据;若数据不含标题行,则设定 header = None;

index_col

  • index_col:指定作为行索引的列。

usecols

  • usecols:指定只使用哪些列
    -- None:全部(默认)
    -- str:如:usecols = 'A,C:F' # 这里的A,C,F指的是EXCEL表中的A列等。
    -- int-list:如:usecols = [0,2]
    -- str-list:如:usecols = ['姓名','成绩']
    -- lambda函数:如:lambda x: x == "姓名"
  • 建议使用str-list 方法。因为当EXCEL表结构发生变化时,易于代码维护。

skiprows

  • skiprows:省略指定行数的数据


    示例图片
import pandas as pd
pd.read_excel("要打开的EXCEL文件.xlsx",
                skiprows = [0,2] )    # 跳过索引为0和2的两行,用列表形式表达。

names

names:指定使用的标题行列名列表,如果表格不包含标题行,则应显式传递header = None

dtype

dtype:是一个字典,表示方法{‘列名’:'类型'},用来设置列的数据类型。

  • int8/int16/int32/int64(默认): 整型
  • float16/float32/float64(默认):浮点型
  • str/string: 字符串
  • bool: 布尔型
  • categort: 分类
  • datetime64[ns]: 时间戳(纳秒)
  • period[Y/M/D]: 时间周期(年/月/日)
  • object: python对象混合类型
# 类型的查看
import pandas as pd
df = pd.read_excel("要打开的EXCEL文件.xlsx")
df.dtypes  # 查看读出数据的数据类型

在这里会发现,字符型数据被识别为 object 类型。需要注意的是不能把int64类型直接转化为str类型,这时可用下列代码进行转换:

df['列名'] = df['列名'].astype('string')

parse_dates

parse_dates:将表中的日期数据转化为日期类型,例如:


未转换前识别出的数据类型

转换后识别出的数据类型

在这里就用到了一个转换,代码如下:

parse_dates = [0,1,2,3,4,5,6]  # 将列索引为0,1,2,3,4,5,6列中的数据转换为日期类型

将多列数据拼接成一个日期格式类型,例如:


年月日分开的数据表

转换代码:

import pandas as pd
df = pd.read_excel("要打开的EXCEL文件.xlsx",parse_dates = [[0, 1, 2]])

以上代码中,不使用索引,使用列名也是可以的,即:

import pandas as pd
df = pd.read_excel("要打开的EXCEL文件.xlsx",parse_dates = [['年', '月', '日']])

还可以使用字典的形式,指定合并后列名,即:

import pandas as pd
df = pd.read_excel("要打开的EXCEL文件.xlsx",parse_dates = {'日期': ['年', '月', '日']})

date_parser

date_parse须与parse_dates配合使用,可将形如以下格式的数据转换为日期格式:


中文格式日期

转换代码如下:

import pandas as pd
df = pd.read_excel(
                    "要打开的EXCEL文件.xlsx",
                    parse_dates = [0],
                    date_parser = lambda x: pd.to_datetime(
                    x,format = '%Y年%m月%d日'
                    )
)    # 这里的 parse_dates = [0],用来指定要转换的列

na_values

na_values:识别为NaN(缺失值)的其他字符串。

  • NaN意为 Not a Number <float>
  • na_values基本用法:
    -- na_values = 0
    -- na_values = '空值'
    -- na_values = ['空值',0]
    -- na_values = {'列名': ['空值',0] }
    小坑:如果单元格里有空格,读取后不会显示 NaN。
    将单元格中的0替换为NaN
import pandas as pd
df = pd.read_excel(
                    "要打开的EXCEL文件.xlsx",
                    na_values  = 0
) 

将单元格中的字符串 ‘a' 替换为NaN

import pandas as pd
df = pd.read_excel(
                    "要打开的EXCEL文件.xlsx",
                    na_values  = 'a'
) 

用列表形式传入,将单元格中的指定值替换为NaN ,如:将单元格中的字符串’a‘,0和空格替换为 NaN

import pandas as pd
df = pd.read_excel(
                    "要打开的EXCEL文件.xlsx",
                    na_values  = [ 'a',0,' ']
) 

用字典形式传入,将指定列单元格中的指定值替换为NaN,如:

import pandas as pd
df = pd.read_excel(
                    "要打开的EXCEL文件.xlsx",
                    na_values  = {'列名',[ 'a',0,' ']}

converters

converters:是一个值转换函数,默认为None,传入值为一个字典。如:


有格式符号的单元格值

要去掉这些空格符号,就可使用converters进行转换:

import pandas as pd
df = pd.read_excel(
                    "要打开的EXCEL文件.xlsx",
                    converters  ={
                    '货号': lambda x: x.strip()
                    }
)
# 也可不用lambda函数:
import pandas as pd
df = pd.read_excel(
                    "要打开的EXCEL文件.xlsx",
                    converters  ={
                    '货号': str.strip
                    }
)

也可以用它来进行一些简单的计算,如:将所有的销量值都加上5

import pandas as pd
df = pd.read_excel(
                    "要打开的EXCEL文件.xlsx",
                    converters  ={
                    '销量': lambda x: x + 5
                    }
)

今天就整理到这里,还有些参数比较简单。不笔记了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容