Pandas读写Excel(read_excel、to_excel)!

Pandas读写Excel(read_excel、to_excel)!

 

文章目录

  • 一、Excel文件
    • 1. read_excel()
      • io
      • sheet_name
      • header
      • names
      • index_col
      • usecols
      • squeeze
      • skiprows
    • 2. to_excel()
      • excel_writer
      • sheet_name
      • na_rep
      • index
      • columns

一、Excel文件

包括xls和xlsx两种格式均得到支持,底层是调用了xlwt和xlrd进行excel文件操作,相应接口为read_excel()和to_excel()

1. read_excel()

格式代码

pandas.read_excel(io,
               sheet_name=0,
               header=0,
               names=None,
               index_col=None,
               parse_cols=None,
               usecols=None,
               squeeze=False,
               dtype=None,
               engine=None,
               converters=None,
               true_values=None,
               false_values=None,
               skiprows=None,
               nrows=None,
               na_values=None,
               keep_default_na=True,
               na_filter=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)

常用参数

  • io:文件路径
  • sheet_name:默认是sheetname为0(第一个sheet表);sheet_name=“Sheet1”(指定表名);返回多表使用sheetname=[0,1],若sheetname=None是返回全表 。
  • header :指定作为列名的行,默认0,即取第一行,数据为列名行以下的数据;若数据不含列名,则设定 header = None
  • names:指定列的名字,传入一个list数据
  • index_col:指定列为索引列,默认None列(0索引)用作DataFrame的行标签。
  • usecols:该参数为返回指定的列。int或list,默认为None。如果为None则解析所有列
    如果为int则表示要解析的最后一列
    如果为int列表则表示要解析的列号列表
    如果字符串则表示以逗号分隔的Excel列字母和列范围列表(例如“A:E”或“A,C,E:F”)。范围包括双方
  • squeeze:boolean,默认为False,如果解析的数据只包含一列,则返回一个Series。
  • dtype:列的类型名称或字典,默认为None,也就是不改变数据类型。其作用是指定列的数据类型。

io

指定文件路径

>>> import pandas as pd
>>>
>>> df = pd.read_excel(r'E:Python学习test.xls')
>>> print(df)
   姓名  年龄 性别
0  小白  201  小黑  212  小红  20

sheet_name

默认是sheetname为0,返回多表使用sheetname=[0,1],若sheetname=None是返回全表 。注意:int/string返回的是dataframe,而none和list返回的是dict of dataframe。

>>> import pandas as pd
>>>
>>> # 一、默认情况
>>> df = pd.read_excel(r'E:Python学习test.xls')
>>> print(df)
   姓名  年龄 性别
0  小白  201  小黑  212  小红  20>>>
>>> # 二、指定第一个sheet表格
>>> # 1. 索引方式
>>> df = pd.read_excel(r'E:Python学习test.xls', sheet_name=0)
>>> print(df)
   姓名  年龄 性别
0  小白  201  小黑  212  小红  20>>> # 2. sheet表名方式指定第一个
>>> df = pd.read_excel(r'E:Python学习test.xls', sheet_name='Sheet1')
>>> print(df)
   姓名  年龄 性别
0  小白  201  小黑  212  小红  20>>>
>>> # 三、指定多个表格
>>> df = pd.read_excel(r'E:Python学习test.xls', sheet_name=[0, 1])
>>> print(df)
{0:    姓名  年龄 性别
0  小白  201  小黑  212  小红  20, 1:    学科   成绩
0  语文  100
1  数学   90
2  英语   80}
>>>
>>> # 三、返回全表
>>> # 1. sheetname=None
>>> df = pd.read_excel(r'E:Python学习test.xls', sheet_name=None)
>>> print(df)
{'Sheet1':    姓名  年龄 性别
0  小白  201  小黑  212  小红  20, 'Sheet2':    学科   成绩
0  语文  100
1  数学   90
2  英语   80}
>>> # 2. 指定多表时选择全部
>>> df = pd.read_excel(r'E:Python学习test.xls', sheet_name=[0, 1])
>>> print(df)
{0:    姓名  年龄 性别
0  小白  201  小黑  212  小红  20, 1:    学科   成绩
0  语文  100
1  数学   90
2  英语   80}

header

指定作为列名的行,默认0,即取第一行,数据为列名行以下的数据;若数据不含列名,则设定 header = None

>>> import pandas as pd
>>>
>>> # 一、默认第一行数据作为列名
>>> df = pd.read_excel(r'E:Python学习test.xls')
>>> print(df)
   姓名  年龄 性别
0  小白  201  小黑  212  小红  20>>> df = pd.read_excel(r'E:Python学习test.xls', header=0)
>>> print(df)
   姓名  年龄 性别
0  小白  201  小黑  212  小红  20>>>
>>> # 二、数据不含作为列名的行
>>> df = pd.read_excel(r'E:Python学习test.xls', header=None)
>>> print(df)
    0   1   2
0  姓名  年龄  性别
1  小白  202  小黑  213  小红  20

names

指定列的名字,传入一个list数据

>>> import pandas as pd
>>>
>>> 设置列名为A、B、C
>>> df = pd.read_excel(r'E:Python学习test.xls', names=['A', 'B', 'C'])
>>> print(df)
    A   B  C
0  小白  201  小黑  212  小红  20

index_col

指定列为索引列,默认None列(0索引)用作DataFrame的行标签。

>>> import pandas as pd
>>>
>>>> # 设置第一列为行索引
>>> df = pd.read_excel(r'E:Python学习test.xls', index_col=0)
>>> print(df)
    年龄 性别
姓名
小白  20  男
小黑  21  男
小红  20

usecols

该参数为返回指定的列。int或list,默认为None。如果为None则解析所有列,如果为int则表示要解析的最后一列,如果为int列表则表示要解析的列号列表,如果字符串则表示以逗号分隔的Excel列字母和列范围列表(例如“A:E”或“A,C,E:F”)。范围包括双方

>>> import pandas as pd
>>>
>>> # 一、传入字符串
>>> # 1. 指定不连续列
>>> df = pd.read_excel(r'E:Python学习test.xls', usecols="A,C")
>>> print(df)
   姓名 性别
0  小白  男
1  小黑  男
2  小红  女
>>> # 2. 指定A、B、C列
>>> df = pd.read_excel(r'E:Python学习test.xls', usecols="A,B:C")
>>> print(df)
   姓名  年龄 性别
0  小白  201  小黑  212  小红  20>>>
>>> # 二、传入列表
>>> # 1. 索引方式
>>> df = pd.read_excel(r'E:Python学习test.xls', usecols=[0, 1, 2])
>>> print(df)
   姓名  年龄 性别
0  小白  201  小黑  212  小红  20>>> # 2. 表头方式
>>> df = pd.read_excel(r'E:Python学习test.xls', usecols=['姓名', '年龄', '性别'])
>>> print(df)
   姓名  年龄 性别
0  小白  201  小黑  212  小红  20

squeeze

默认为False,如果解析的数据只包含一列,True则返回一个Series。

>>> import pandas as pd
>>>
>>> # 只读取第一列,设置为Series
>>> df = pd.read_excel(r'E:Python学习test.xls', usecols="A",squeeze=True)
>>> print(df)
0    小白
1    小黑
2    小红
Name: 姓名, dtype: object
>>> print(type(df))
<class 'pandas.core.series.Series'>

skiprows

省略开头指定行数的数据

>>> import pandas as pd
>>>
>>> # 跳过第一行数据
>>> df = pd.read_excel(r'E:Python学习test.xls', skiprows=1)
>>> print(df)
   小白  200  小黑  211  小红  20>>> print(type(df))
<class 'pandas.core.frame.DataFrame'>

2. to_excel()

语法格式

pandas.to_excel(self, 
                excel_writer, 
                sheet_name='Sheet1', 
                na_rep='', 
                float_format=None, 
                columns=None, 
                header=True,
                index=True, 
                index_label=None, 
                startrow=0, 
                startcol=0, 
                engine=None, 
                merge_cells=True, 
                encoding=None,
                inf_rep='inf', 
                verbose=True, 
                freeze_panes=None)

常用参数

  • excel_writer : 字符串或ExcelWriter 对象,文件路径或现有的ExcelWriter
  • sheet_name :字符串,默认“Sheet1”,将包含DataFrame的表的名称。
  • na_rep : 字符串,默认‘ ’,缺失数据表示方式
  • float_format : 字符串,默认None,格式化浮点数的字符串
  • columns : 序列,可选,要编写的列
  • header : 布尔或字符串列表,默认为Ture。写出列名。如果给定字符串列表,则假定它是列名称的别名。
  • index :布尔,默认的Ture,写行名(索引)
  • index_label : 字符串或序列,默认为None。如果需要,可以使用索引列的列标签。如果没有给出,标题和索引为true,则使用索引名称。如果数据文件使用多索引,则需使用序列。

excel_writer

指定文件路径

>>> import pandas as pd
>>>
>>> data = [{'A': 1, 'B': 2}, {'A': 3, 'B': 4, 'C': 5}]
>>> df = pd.DataFrame(data)
>>> print(df)
   A  B    C
0  1  2  NaN
1  3  4  5.0
# 写入指定路径下
>>> df.to_excel(r'E:Python学习test1.xlsx')

在指定路径下文件新文件:
e7a392faa0fb48eaa3ef6568558c5614

sheet_name

指定sheet表名,可以接受字符串,默认为“sheet1”

1)写入单个sheet:

>>> import pandas as pd
>>>
>>> data = [{'A': 1, 'B': 2}, {'A': 3, 'B': 4, 'C': 5}]
>>> df = pd.DataFrame(data)
>>> print(df)
   A  B    C
0  1  2  NaN
1  3  4  5.0
# 设置sheet表名为test
>>> df.to_excel(r'E:Python学习test1.xlsx', sheet_name='test')

运行结果:
14103371e70a4017aa6dacb2eec80023
2)写入多个sheet表:

>>> import pandas as pd
>>>
>>> df1 = pd.DataFrame([{'A': 1, 'B': 2}, {'A': 3, 'B': 4, 'C': 5}])
>>> df2 = pd.DataFrame([{'A': 1, 'B': 2}, {'A': 3, 'B': 4, 'C': 5}])
>>>
>>> with pd.ExcelWriter(r'E:Python学习test.xlsx') as writer:
...     df1.to_excel(writer, sheet_name='test1')
...     df2.to_excel(writer, sheet_name='test2')

运行结果:
6d25f95d097245c09ff745ccdf2eb7de

na_rep

表示替补缺失数据,不写默认为空

>>> import pandas as pd
>>>
>>> data = [{'A': 1, 'B': 2}, {'A': 3, 'B': 4, 'C': 5}]
>>> df = pd.DataFrame(data)
>>> print(df)
   A  B    C
0  1  2  NaN
1  3  4  5.0
# 把空值替换为100
>>> df.to_excel(r'E:Python学习test.xlsx', na_rep='100')

运行结果:
0ad2daddde4945a28ca9c5e2098beaea

index

表示是否写行索引,默认为True

1)不写入行索引:

>>> import pandas as pd
>>>
>>> data = [{'A': 1, 'B': 2}, {'A': 3, 'B': 4, 'C': 5}]
>>> df = pd.DataFrame(data)
>>> print(df)
   A  B    C
0  1  2  NaN
1  3  4  5.0
>>> df.to_excel(r'E:Python学习test.xlsx', index=False)

运行结果:
7b95ddeaed7b410eb6a081b70e069bb1

2)写入行索引:

>>> import pandas as pd
>>>
>>> data = [{'A': 1, 'B': 2}, {'A': 3, 'B': 4, 'C': 5}]
>>> df = pd.DataFrame(data)
>>> print(df)
   A  B    C
0  1  2  NaN
1  3  4  5.0
>>> df.to_excel(r'E:Python学习test.xlsx', index=True)

运行结果:
f842df08b2344c13ae9c7e1fe31697be

columns

指定要写入的列

>>> import pandas as pd
>>>
>>> data = [{'A': 1, 'B': 2}, {'A': 3, 'B': 4, 'C': 5}]
>>> df = pd.DataFrame(data)
>>> print(df)
   A  B    C
0  1  2  NaN
1  3  4  5.0
# 只写入A、B列
>>> df.to_excel(r'E:Python学习test.xlsx', columns=['A','B'])

运行结果:
5ac1f642a0844221a5ab2c95db0ca1e1

学习资料见知识星球。

以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。

快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利​​​​!

更多技巧, www.excelbook.cn

欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;

2022021703525891-32

你将获得:

1、价值上万元的专业的PPT报告模板。

2、专业案例分析和解读笔记。

3、实用的Excel、Word、PPT技巧。

4、VIP讨论群,共享资源。

5、优惠的会员商品。

6、一次付费只需99元,即可下载本站文章涉及的文件和软件。

文章版权声明 1、本网站名称:Excelbook
2、本站永久网址:http://www.excelbook.cn
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长王小琥进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。

THE END
分享
二维码
< <上一篇
下一篇>>