美文网首页Python实例教程
Pandas笔记3-导入excel文件

Pandas笔记3-导入excel文件

作者: 渐悟懂劲 | 来源:发表于2018-10-28 00:13 被阅读0次

    1 本文适合读者

    刚开始学习Pandas的新手

    2 read_excel()方法和主要参数

    read_excel方法通过调用xlrd模块可以读取Excel 2003 (.xls) and Excel 2007+ (.xlsx) 文件。

    df = pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, squeeze=False, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, parse_dates=False, date_parser=None, thousands=None, comment=None, skipfooter=0, convert_float=True, **kwds)
    

    参数说明

    io :Excel文件路径或URL

    df = pd.read_excel('Excel_file.xlsx')  #读入Excel文件
    

    sheet_name :Excel文件的sheet表可以用shee_name(字符串形式)来表示,也可以用索引号(从0开始)表示,默认是0,也就是第一张sheet表
    参数设为None,表示打开所有 sheet
    如果用sheet表名称或者索引号打开会返回一个DataFrame对象;
    如果用list或者None打开会返回一个包含DataFrame对象的字典。

    df = pd.read_excel('Excel_file.xlsx', sheet_name=0)    #打开第一张sheet
    df = pd.read_excel('Excel_file.xlsx', sheet_name="Sheet2")    #打开“Sheet2”这张表,注意名称大小写不要写错
    

    header :使用哪一行(或几行)作列名,默认是0
    header = 0 表示使用第一行作DataFrame的列名
    header = None 表示没有列名

    df = pd.read_excel('Excel_file.xlsx', sheet_name="Sheet2", header = 0)    #一般情况下都是使用第一行作列名
    

    names :列名,如果excel数据没有列名,可以设成header = None,并通过传入列名列表来规定列名
    如果excel数据有列名,但是你想用新的列名替换,则可以设成header=0

    df = pd.read_excel('Excel_file.xlsx',sheet_name="Sheet2", header = None, names=['month','fruit','count','price','amount'])    #传入列名
    

    index_col :指定哪一列作为行标签,第1列为0,默认为None

    df = pd.read_excel('Excel_file.xlsx',sheet_name="Sheet2",index_col=0)    #把第1列作为行标签
    

    usecols :导入哪些列
    默认是None,即导入所有列
    设为数字n,表示导入从第1列到第n+1列,0表示导入第1列,1表示第1列和第2列,以此类推
    设为数字列表,则导入指定的列
    还可以用字母来表示要导入的列

    df = pd.read_excel('Excel_file.xlsx',sheet_name="Sheet2", usecols=3)    #导入第1-4列
    df = pd.read_excel('Excel_file.xlsx',sheet_name="Sheet2", usecols=[0,2,4])     #导入第1列、第3列和第5列
    df = pd.read_excel('Excel_file.xlsx',sheet_name="Sheet2", usecols="A:C")    #导入第1-3列
    df = pd.read_excel('Excel_file.xlsx',sheet_name="Sheet2", usecols="A,C")    #导入第1列和第3列
    

    dtype :列的数据类型,默认为None
    整型用int表示,浮点型用float表示,不要写成int64和float64
    这里dtype={'金额':str}也可以写成dtype={'金额':object}

    df = pd.read_excel('Excel_file.xlsx', sheet_name="Sheet2", dtype={'销量':float})    #原本销量是整数,现在按浮点数导入
    df = pd.read_excel('Excel_file.xlsx', sheet_name="Sheet2", dtype={'金额':int})    #原本金额是浮点数,现在按整数导入
    df = pd.read_excel('Excel_file.xlsx', sheet_name="Sheet2", dtype={'金额':str})    #金额按字符串导入,类型变成了object
    

    converters :这是一个数据类型转换器,可以在导入原始文件时将多个指定列的数据类型转换成其他类型,默认是None
    该参数在设置时形式上是一个字典,“健”可以是代表列的整数值或者列标签名称,“值”是一个函数,用来转换数据类型

    skiprows :在导入时要跳过的开头行数,索引从0开始

    skiprows=1  #跳过第1行,从第2行开始导入
    skiprows=2  #跳过第1-2行,从第3行开始导入
    skiprows=[1,3]    #跳过第2行和第4行,第3行保留
    

    nrows : 指定要导入的行数,传入一个整数值,默认是None

    na_values :除了下面默认的字符串以外,还要将哪些字符串作为空值来导入

    例如excel文件内容:

         fruit  code
    0    apple   100
    1   banana   101
    2   orange   102
    3  coconut   103
    df = pd.read_excel('fruit.xlsx',sheet_name="Sheet1",na_values=['apple','banana'])
    结果
         fruit  code
    0      NaN   100
    1      NaN   101
    2   orange   102
    3  coconut   103
    

    默认情况下,以下值(字符串)会被解析成NaN:
    ‘’, ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’, ‘-NaN’, ‘-nan’, ‘1.#IND’, ‘1.#QNAN’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘n/a’, ‘nan’, ‘null’.

    设置了na_values之后就会额外再增加会被解析成NaN的字符串

    parse_dates :如果日期在Excel文件中是以字符串形式储存的,可以用parse_dates转换成datetime格式

    keep_default_na :如果指定了na_values参数且keep_default_na=False,则默认的NaN值会被覆盖

    verbose :布尔型,默认为False
    指出非数值列的空值替换数量

    thousands :千位分隔符,默认为None
    千位分隔符用来将字符串类型的列转换成数值型
    该参数仅用于读取Excel文件时那些以文本格式存储的列

    skipfooter :要跳过的结尾行数,默认为0

    convert_float :布尔型,默认为True
    是否把整数型的浮点数转换成整数(即1.0 -> 1)
    Excel在储存数值时都是按浮点数储存的,如果该参数为False,所有的数值都会按浮点型导入。

    3 导入excel文件的常见问题

    3.1 导入数字字符串变整数

    有时候我们必须保留excel文件中的数字字符串,比如有前导0的电话区号、特殊编码等,pandas默认会把数字字符串直接按整数导入。

    比如原始excel中的数据:

    100123456789,beijing,010
    200123456789,shanghai,021
    300123456789,shenzhen,022
    400123456789,guangzhou,023
    500123456789,hangzhou,024
    600123456789,nanjing,025
    

    按默认方式导入,df1 = pd.read_excel('numeric.xlsx'),在pandas中可以看到,区号被自动识别为整数,数字前面的0被去掉了:

                 id       city  code
    0  100123456789    beijing    10
    1  200123456789   shanghai    21
    2  300123456789   shenzhen    22
    3  400123456789  guangzhou    23
    4  500123456789   hangzhou    24
    5  600123456789    nanjing    25
    
    df1.dtypes
    id       int64
    city     object
    code     int64
    

    为了保留原始的数字字符串的格式,我们可以指定dtype=str,来将原始数据按字符串格式导入:df2 = pd.read_excel('numeric.xlsx',dtype=str)

                 id       city code
    0  100123456789    beijing  010
    1  200123456789   shanghai  021
    2  300123456789   shenzhen  022
    3  400123456789  guangzhou  023
    4  500123456789   hangzhou  024
    5  600123456789    nanjing  025
    
    df2.dtypes
    id      object
    city    object
    code    object
    

    相关文章

      网友评论

        本文标题:Pandas笔记3-导入excel文件

        本文链接:https://www.haomeiwen.com/subject/tseltqtx.html