pandas读取数据到excel:一篇文章让你了解pandas操作excel的写入和写出
pandas读取数据到excel:一篇文章让你了解pandas操作excel的写入和写出excel = pandas.ExcelFile("your excel") print(excel.sheet_names) 现在知道了sheet名,读取到pandas中,就可以处理数据了df1=pd.read_excel('201709.xls' sheet_name=0) 问题又来了,不知道有哪些sheets名字:import pandas as pd 第二步导入需要处理的数据:pd.read_excel('tmp.xlsx') 这是比较简单的读取单一sheet的情况,但是如果sheet比较多,或者只是想读取某几个sheet的该怎么办呢?read_excel的参数sheet_name可以设置读取的sheet名:
excel对于办公人员来说,再熟悉不过,但是通过Pandas如何来处理excel的数据,很多人一直很苦恼,其实pandas处理excel,一般是将excel的数据读取到pandas中,将excel作为一种数据存储的介质,和读取csv差不多,但是不同的是excel可以有多个sheet 导出的时候也分为只导入到一个sheet还是将多个sheet写入到一个工作簿里面,下面一起来看看吧!
read_excel:
pandas.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 keep_default_na=True verbose=False parse_dates=False date_parser=None thousands=None comment=
首先还是先看看需要哪些准备工作,pandas不用多说肯定是要先安装的,没有的可以猜CMD下输入:pip install pandas,但是要处理excel还需要倒入另外两个库:xlrd(xlrd是读excel,xlwt是写excel的库)
先来看看一个实例:
第一步:导入必要的库:
import pandas as pd
第二步导入需要处理的数据:
pd.read_excel('tmp.xlsx')
这是比较简单的读取单一sheet的情况,但是如果sheet比较多,或者只是想读取某几个sheet的该怎么办呢?
read_excel的参数sheet_name可以设置读取的sheet名:
df1=pd.read_excel('201709.xls' sheet_name=0)
问题又来了,不知道有哪些sheets名字:
excel = pandas.ExcelFile("your excel") print(excel.sheet_names)
现在知道了sheet名,读取到pandas中,就可以处理数据了
如何保存到excel中呢?
data.to_excel('1.xlsx' sheet_name='Sheet1' index=False header=True)
通过以上简单的介绍,应该可以初步了解了pandas的导入和导出过程,但还都比较简单,我们的需求可能更复杂,下面一起来仔细阅读以下所有的源代码:
先看下中文版read_excel的参数解释:
pandas.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 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)[source]¶
1、io,Excel的存储路径
建议使用英文路径以及英文命名方式。
io = r'C:\Users\Administrator\Desktop\data.xlsx'
2、sheet_name,要读取的工作表名称
可以是整型数字、列表名或SheetN,也可以是上述三种组成的列表。
整型数字:目标sheet所在的位置,以0为起始,比如sheet_name = 1代表第2个工作表。
data = pd.read_excel(io sheet_name = 1)
data.head()
列表名:目标sheet的名称,中英文皆可。
data = pd.read_excel(io sheet_name = '英超射手榜') data.head()
SheetN:代表第N个sheet,S要大写,注意与整型数字的区别。
data = pd.read_excel(io sheet_name = 'Sheet5') data.head()
组合列表: sheet_name = [0 '英超射手榜' 'Sheet4'],代表读取三个工作表,分别为第1个工作表、名为“英超射手榜”的工作表和第4个工作表。显然,Sheet4未经重命名。
sheet_name 默认为0,取Excel第一个工作表。如果读取多个工作表,则显示表格的字典。对于初学者而言,建议每次读取一个工作表,然后进行二次整合。
data = pd.read_excel(io sheet_name = ['英超积分榜' '西甲积分榜'] nrows = 5) # sheet_name = ['英超积分榜' '西甲积分榜'] ,返回两个工作表组成的字典 data
3、header, 用哪一行作列名:一般很少设置
默认为0 ,如果设置为[0 1],则表示将前两行作为多重索引。
data = pd.read_excel(io sheet_name = '英超积分榜' header = [0 1]) # 前两行作为列名。 data.head()
不想要列名也可以:
data = pd.read_excel(basestation header=None)
4、names, 自定义最终的列名:可以在读取的时候设置你想要的名字
一般适用于Excel缺少列名,或者需要重新定义列名的情况。
注意:names的长度必须和Excel列长度一致,否则会报错。
data = pd.read_excel(io sheet_name = '英超射手榜' names = ['rank' 'player' 'club' 'goal' 'common_goal' 'penalty']) data.head()
5、index_col, 用作索引的列:这个参数还是很重要的
可以是工作表列名称,如index_col = '排名';
可以是整型或整型列表,如index_col = 0 或 [0 1],如果选择多个列,则返回多重索引。
data = pd.read_excel(io sheet_name = '英超射手榜' index_col = '排名') data.head() data = pd.read_excel(io sheet_name = '英超射手榜' index_col = [0 1]) data.head()
6、usecols,需要读取哪些列:数据量大的化可以设置,数据量少可以读取后再截取相应列
可以使用整型,从0开始,如[0 2 3];
可以使用Excel传统的列名“A”、“B”等字母,如“A:C E” ="A B C E",注意两边都包括。
usecols 可避免读取全量数据,而是以分析需求为导向选择特定数据,可以大幅提高效率。
data = pd.read_excel(io sheet_name = '西甲射手榜' usecols = [0 1 3]) data.head() data = pd.read_excel(io sheet_name = '西甲射手榜' usecols = 'A:C E') data.head()
7、squeeze,当数据仅包含一列:如果数据量真的很少可以用pd.read_clipboard()
squeeze为True时,返回Series,反之返回DataFrame。
data = pd.read_excel(io sheet_name = 'squeeze' squeeze = True) data.head() data = pd.read_excel(io sheet_name = 'squeeze' squeeze = False) data.head()
8、converters :强制规定列数据类型:如果涉及数据计算,要不你去excel里面更改数据类型,要不你还是乖乖的设置这个参数,省的后期报错
converters = {'排名': str '场次': int}, 将“排名”列数据类型强制规定为字符串(pandas默认将文本类的数据读取为整型),“场次”列强制规定为整型;
主要用途:保留以文本形式存储的数字。
data = pd.read_excel(io sheet_name = 'converters') data['排名'].dtype data = pd.read_excel(io sheet_name = 'converters' converters = {'排名': str '场次': float}) data['排名'].dtype
9、skiprows,跳过特定行:很少用到,有时候表头不对可能需要跳过第一行
skiprows= n, 跳过前n行; skiprows = [a b c],跳过第a 1 b 1 c 1行(索引从0开始);
使用skiprows 后,有可能首行(即列名)也会被跳过。最好用列表
data = pd.read_excel(io sheet_name = '英超射手榜' skiprows = [1 2 3]) # 跳过第2 3 4行数据(索引从0开始,包括列名) data.head() data = pd.read_excel(io sheet_name = '英超射手榜' skiprows = 3) data.head()
10、nrows ,需要读取的行数:数据太大,可以先打开一部分看看
如果只想了解Excel的列名及概况,不必读取全量数据,nrows会十分有用。
data = pd.read_excel(io sheet_name = '英超射手榜' nrows = 10) data
11、skipfooter , 跳过末尾n行:很少用得到,
data = pd.read_excel(r'C:\Users\Administrator\Desktop\data.xlsx' sheet_name = '英超射手榜' skipfooter = 43) # skipfooter = 43, 跳过末尾43行(索引从0开始) 英文版本的参数解释:
pandas.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 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)[source]
Read an Excel file into a pandas DataFrame.
Support both xls and xlsx file extensions from a local filesystem or URL. Support an option to read a single sheet or a list of sheets.
Parameters:
io : str ExcelFile xlrd.Book path object or file-like object:路径
Any valid string path is acceptable. The string could be a URL. Valid URL schemes include http ftp s3 and file. For file URLs a host is expected. A local file could be: file://localhost/path/to/table.xlsx.
If you want to pass in a path object pandas accepts any os.PathLike.
By file-like object we refer to objects with a read() method such as a file handler (e.g. via builtin open function) or StringIO.
sheet_name : str int list or None default 0:表名
Strings are used for sheet names. Integers are used in zero-indexed sheet positions. Lists of strings/integers are used to request multiple sheets. Specify None to get all sheets.
Available cases:
- Defaults to 0: 1st sheet as a DataFrame
- 1: 2nd sheet as a DataFrame
- "Sheet1": Load sheet with name “Sheet1”
- [0 1 "Sheet5"]: Load first second and sheet named “Sheet5” as a dict of DataFrame
- None: All sheets.
header : int list of int default 0 :确定哪个行为表头,不写默认为第0行
Row (0-indexed) to use for the column labels of the parsed DataFrame. If a list of integers is passed those row positions will be combined into a MultiIndex. Use None if there is no header.
names : array-like default None :列名称,默认为第一行的值,也可以自定义
List of column names to use. If file contains no header row then you should explicitly pass header=None.
index_col : int list of int default None:确定哪个列为索引,
Column (0-indexed) to use as the row labels of the DataFrame. Pass None if there is no such column. If a list is passed those columns will be combined into a MultiIndex. If a subset of data is selected with usecols index_col is based on the subset.
usecols : int str list-like or callable default None :确定导入哪些列
Return a subset of the columns.
- If None then parse all columns.
- If int then indicates last column to be parsed.
- Deprecated since version 0.24.0: Pass in a list of int instead from 0 to usecols inclusive.
- If str then indicates comma separated list of Excel column letters and column ranges (e.g. “A:E” or “A C E:F”). Ranges are inclusive of both sides.
- If list of int then indicates list of column numbers to be parsed.
- If list of string then indicates list of column names to be parsed.
- New in version 0.24.0.
- If callable then evaluate each column name against it and parse the column if the callable returns True.
- New in version 0.24.0.
如果是int,则表示要解析的最后一列。
从版本0.24.0开始不推荐使用:传入int列表而不是0到usecols(包含)。
如果是str,则表示以逗号分隔的Excel列字母和列范围列表(例如“A:E”或“A,C,E:F”)。 范围包括双方。
如果是int列表,则表示要解析的列号列表。
如果是string列表,则表示要解析的列名列表。
版本0.24.0中的新功能。
如果是可调用的,则根据它评估每个列名称,如果callable返回True,则解析该列。
squeeze : bool default False:如果只有一列可以转换为Series
If the parsed data only contains one column then return a Series.
dtype : Type name or dict of column -> type default None :数据或列的数据类型。
Data type for data or columns. E.g. {‘a’: np.float64 ‘b’: np.int32} Use object to preserve data as stored in Excel and not interpret dtype. If converters are specified they will be applied INSTEAD of dtype conversion.
例如。 {'a':np.float64,'b':np.int32}使用对象保存存储在Excel中的数据而不解释dtype。 如果指定了转换器,则它们将应用于dtype转换的INSTEAD。数据或列的数据类型。 例如。 {'a':np.float64,'b':np.int32}使用对象保存存储在Excel中的数据而不解释dtype。 如果指定了转换器,则它们将应用于dtype转换的INSTEAD。
New in version 0.20.0.
engine : str default None: 引擎
If io is not a buffer or path this must be set to identify io. Acceptable values are None or xlrd.
converters : dict default None 强制规定列数据类型
Dict of functions for converting values in certain colu mns. Keys can either be integers or column labels values are functions that take one input argument the Excel cell content and return the transformed content.
true_values : list default None:要视为True的值。
Values to consider as True.
New in version 0.19.0.
false_values : list default None:要考虑为False的值。
Values to consider as False.
New in version 0.19.0.
skiprows : list-like :跳过哪些行,从表头开始数
Rows to skip at the beginning (0-indexed).
nrows : int default None: 需要读取的行数
Number of rows to parse.
New in version 0.23.0.
na_values : scalar str list-like or dict default None :确定如何填补空值
Additional strings to recognize as NA/NaN. If dict passed specific per-column NA values. By default the following values are interpreted as 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’.
keep_default_na : bool default True
If na_values are specified and keep_default_na is False the default NaN values are overridden otherwise they’re appended to.
verbose : bool default False
Indicate number of NA values placed in non-numeric columns.
parse_dates : bool list-like or dict default False:如果列或索引包含不可解析的日期,则整个列或索引将作为对象数据类型以不变的方式返回。 对于非标准日期时间解析,请在pd.read_excel之后使用pd.to_datetime。
The behavior is as follows:
- bool. If True -> try parsing the index.
- list of int or names. e.g. If [1 2 3] -> try parsing columns 1 2 3 each as a separate date column.
- list of lists. e.g. If [[1 3]] -> combine columns 1 and 3 and parse as a single date column.
- dict e.g. {‘foo’ : [1 3]} -> parse columns 1 3 as date and call result ‘foo’
If a column or index contains an unparseable date the entire column or index will be returned unaltered as an object data type. For non-standard datetime parsing use pd.to_datetime after pd.read_excel.
Note: A fast-path exists for iso8601-formatted dates.
具体设置:
布尔。 如果为True - >尝试解析索引。
int或名称列表。 例如 如果[1 2 3] - >尝试将每个列1 2 3解析为一个单独的日期列。
列表清单。 例如 如果[[1 3]] - >将第1列和第3列组合在一起并解析为单个日期列。
dict,例如 {'foo':[1 3]} - >将第1 3列解析为日期并调用结果'foo'
date_parser : function optional
Function to use for converting a sequence of string columns to an array of datetime instances. The default uses dateutil.parser.parser to do the conversion. Pandas will try to call date_parser in three different ways advancing to the next if an exception occurs: 1) Pass one or more arrays (as defined by parse_dates) as arguments; 2) concatenate (row-wise) the string values from the columns defined by parse_dates into a single array and pass that; and 3) call date_parser once for each row using one or more strings (corresponding to the columns defined by parse_dates) as arguments.
用于将字符串列序列转换为日期时间实例数组的函数。 默认使用dateutil.parser.parser进行转换。 Pandas将尝试以三种不同的方式调用date_parser,如果发生异常则前进到下一个:1)将一个或多个数组(由parse_dates定义)作为参数传递; 2)将parse_dates定义的列中的字符串值连接(逐行)到一个数组中并传递; 3)使用一个或多个字符串(对应于parse_dates定义的列)作为参数,为每一行调用date_parser一次。
thousands : str default None:用于将字符串列解析为数字的千位分隔符
Thousands separator for parsing string columns to numeric. Note that this parameter is only necessary for columns stored as TEXT in Excel any numeric columns will automatically be parsed regardless of display format.
comment : str default None
Comments out remainder of line. Pass a character or characters to this argument to indicate comments in the input file. Any data between the comment string and the end of the current line is ignored.
skip_footer : int default 0:skipfooter的别名。现在不用了
Alias of skipfooter.
Deprecated since version 0.23.0: Use skipfooter instead.
skipfooter : int default 0:最后的行跳过(0索引)。
Rows at the end to skip (0-indexed).
convert_float : bool default True
Convert integral floats to int (i.e. 1.0 –> 1). If False all numeric data will be read in as floats: Excel stores all numbers as floats internally.
将整数浮点数转换为整数(即1.0 - > 1)。 如果为False,则所有数字数据都将作为浮点数读入:Excel将所有数字存储为内部浮点数。
mangle_dupe_cols : bool default True
Duplicate columns will be specified as ‘X’ ‘X.1’ …’X.N’ rather than ‘X’…’X’. Passing in False will cause data to be overwritten if there are duplicate names in the columns.
**kwds : optional
Optional keyword arguments can be passed to TextFileReader.
Returns:DataFrame or dict of DataFrames
DataFrame from the passed in Excel file. See notes in sheet_name argument for more information on when a dict of DataFrames is returned.
to_excel:
先来看看实例:
df1 = pd.DataFrame([['a' 'b'] ['c' 'd']] index=['row 1' 'row 2'] columns=['col 1' 'col 2']) df1.to_excel("output.xlsx") # doctest: SKIP
也可以指定sheet名:
df1.to_excel("output.xlsx" sheet_name='Sheet_name_1') # doctest: SKIP
如果想要将多个sheet写入一个工作簿:
df2 = df1.copy() with pd.ExcelWriter('output.xlsx') as writer: # doctest: SKIP df1.to_excel(writer sheet_name='Sheet_name_1') df2.to_excel(writer sheet_name='Sheet_name_2'
另外一张写法:
yy=pd.DataFrame(yy) writer=pd.ExcelWriter("D:/Users/dauron/Desktop/output1.xlsx") yy.to_excel(writer 'Sheet1') writer.save()
通常写入的时候都有索引,如果不想要可以:
df1.to_excel("output.xlsx" sheet_name='Sheet_name_1' index=0) # doctest: SKIP
DataFrame.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)[source]
中文本的参数解释:excel_writer : 字符串或ExcelWriter 对象,文件路径或现有的ExcelWriter
df.to_excel('excel_output.xls')
sheet_name :字符串 默认“Sheet1”将包含DataFrame的表的名称。
df.to_excel('excel_output.xls' sheet_name='biubiu')
na_rep : 字符串 默认‘ ’
df.to_excel('excel_output.xls' na_rep=True) df.to_excel('excel_output.xls' na_rep=False) df.to_excel('excel_output.xls' na_rep=11)
缺失数据表示方式
float_format : 字符串 默认None,格式化浮点数的字符串
df.to_excel('excel_output.xls' float_format="%.2f")
columns : 序列 可选要写的列
df.to_excel('excel_output.xls' na_rep=11 columns=['index'])
header : 布尔或字符串列表,默认为Ture。
写出列名。如果给定字符串列表,则假定它是列名称的别名。
df.to_excel('excel_output.xls' na_rep=11 index=False header=None)
index :布尔 默认的Ture,写行名(索引)
df.to_excel('excel_output.xls' na_rep=11 index=False)
index_label : 字符串或序列,默认为None。
如果需要,可以使用索引列的列标签。如果没有给出,标题和索引为true,则使用索引名称。如果数据文件使用多索引,则需使用序列。
startrow :左上角的单元格行来转储数据框
startcol :左上角的单元格列转储数据帧
engine : 字符串 默认不用设置
编写要使用的引擎,'openpyxl'或'xlsxwriter'。 您也可以通过选项io.excel.xlsx.writer,io.excel.xls.writer和io.excel.xlsm.writer进行设置。
df1.to_excel('output1.xlsx' engine='xlsxwriter') # doctest: SKIP df1.to_excel('output1.xlsx' engine='openpyxl') # doctest: SKIP
encoding :编码方式
df1.to_excel('output1.xlsx' encoding='gbk')
————————————————
版权声明:本文为CSDN博主「DeepRunning」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010801439/article/details/80052677
英文版的参数解释:DataFrame.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)[source]
Write object to an Excel sheet.
To write a single object to an Excel .xlsx file it is only necessary to specify a target file name. To write to multiple sheets it is necessary to create an ExcelWriter object with a target file name and specify a sheet in the file to write to.
Multiple sheets may be written to by specifying unique sheet_name. With all data written to the file it is necessary to save the changes. Note that creating an ExcelWriter object with a file name that already exists will result in the contents of the existing file being erased.
Parameters:
excel_writer : str or ExcelWriter object:写入文件的路径
File path or existing ExcelWriter.
sheet_name : str default ‘Sheet1’:写入的excel的sheet名
Name of sheet which will contain DataFrame.
na_rep : str default ‘’ :如何填写空值
Missing data representation.
float_format : str optional :格式化浮点数
Format string for floating point numbers. For example float_format="%.2f" will format 0.1234 to 0.12.
columns : sequence or list of str optional:需要导出的列
Columns to write.
header : bool or list of str default True:是否导出表头
Write out the column names. If a list of string is given it is assumed to be aliases for the column names.
index : bool default True:是否显示索引,默认为True建议修改为False
Write row names (index).
index_label : str or sequence optional:如果导出含有索引,可以设置索引的名字
Column label for index column(s) if desired. If not specified and header and index are True then the index names are used. A sequence should be given if the DataFrame uses MultiIndex.
startrow : int default 0
Upper left cell row to dump data frame.
startcol : int default 0
Upper left cell column to dump data frame.
engine : str optional:
Write engine to use ‘openpyxl’ or ‘xlsxwriter’. You can also set this via the options io.excel.xlsx.writer io.excel.xls.writer and io.excel.xlsm.writer.
编写要使用的引擎,'openpyxl'或'xlsxwriter'。 您也可以通过选项io.excel.xlsx.writer,io.excel.xls.writer和io.excel.xlsm.writer进行设置。
merge_cells : bool default True
Write MultiIndex and Hierarchical Rows as merged cells.
将MultiIndex和Hierarchical Rows写为合并单元格。
encoding : str optional:编码方式,一般不设置,有中文的话可以设置为“gbk
Encoding of the resulting excel file. Only necessary for xlwt other writers support unicode natively.
inf_rep : str default ‘inf’
Representation for infinity (there is no native representation for infinity in Excel).
verbose : bool default True
Display more information in the error logs.
freeze_panes : tuple of int (length 2) optional
Specifies the one-based bottommost row and rightmost column that is to be frozen.
int的元组(长度为2),可选
指定要冻结的从一开的最底行和最右列。
New in version 0.20.0..