机器学习基础—pandas读取表格文件
前言:上一期对pandas的数据结构,dataframe格式做了一个简要的介绍,这一期继续介绍机器学习中常见的表格文件读写问题,任然采用pandas包的内置函数对各类常见表格文件的读写进行介绍
1.excel文件读写(后缀为.xlsx)
利用pandas读取文件主要用到的函数时是read_xxx(),读取后的返回的数据格式为dataframe格式,下面对几种read_xxx()一一介绍
1.1 pd.read_excel()可以用来读取excel文件,函数定义:
pd.read_excel(io, sheet_name=0, header=0, skiprows=None,
skip_footer=0, index_col=None, names=None, usecols=None,
parse_dates=False, date_parser=None, na_values=None,
thousands=None, convert_float=True, converters=None,
dtype=None, true_values=None, false_values=None,
engine=None, squeeze=False, **kwds)
常用的参数解释:
-
sheet_name: excel文件中的表名
-
index_col: 使用哪一列作为行索引,默认从0开始
-
usecols: 读取表格中哪几列,必须是位置索引
-
header: 哪一行设置为列索引,默认是第一行,即header = 0
-
date_parser:解析日期的函数
-
parse_dates:尝试将数据解析为日期,默认为False。如果为True,则尝试解析所有列。此外,还可以指定需要解析的一组列号或者列名
-
names: 列索引
-
engine: 默认是C,如文件路径存在中文时,engine= “python”
-
encoding: 默认是utf-8,还可以是gbk
-
skiprows: 跳过前几行读取文件,默认从0开始
-
nrows: 读取多少行数据
-
converters: 列名跟函数之间的映射关系组成的字典
例如:
import pandas as pd
data = pd.read_excel('C:/Users/chepengyuan/Desktop/学生信息.xlsx')
data
姓名 | 年龄 | 学号 | 成绩 | |
---|---|---|---|---|
0 | 王益 | 20 | 1618402 | 90 |
1 | 时年 | 19 | 1618401 | 98 |
2 | 柳琴 | 21 | 1618302 | 89 |
3 | 萨蒂 | 20 | 1618301 | 88 |
1.2 pd.to_excel()可以用来写入excel文件,函数定义:
DataFrame.to_excel(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,则使用索引名称。如果数据文件使用多索引,则需使用序列。
-
startrow :左上角的单元格行来转储数据框
-
startcol :左上角的单元格列转储数据帧
-
engine : 字符串,默认没有使用写引擎 - 您也可以通过选项io.excel.xlsx.writer,io.excel.xls.writer和io.excel.xlsm.writer进行设置。
-
merge_cells : 布尔,默认为Ture编码生成的excel文件。 只有xlwt需要,其他编写者本地支持unicode。
-
inf_rep : 字符串,默认“正”无穷大的表示(在Excel中不存在无穷大的本地表示)
-
freeze_panes : 整数的元组(长度2),默认为None。指定要冻结的基于1的最底部行和最右边的列
例如:
import pandas as pd
data = {
'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
'year':[2000,2001,2002,2001,2002],
'pop':[1.5,1.7,3.6,2.4,2.9]
}
dataframe1 = pd.DataFrame(data)
print('创建的dataframe1如下:\n',dataframe1)
创建的dataframe1如下:
state year pop
0 Ohio 2000 1.5
1 Ohio 2001 1.7
2 Ohio 2002 3.6
3 Nevada 2001 2.4
4 Nevada 2002 2.9
#将dataframe写入表格
dataframe1.to_excel('C:/Users/chepengyuan/Desktop/表格.xlsx')
2.CSV文件读写(后缀为.csv)
csv文件是以逗号为分隔符的文件,读取参数与excel基本类似,与excel的读取不一样的地方在于如遇到中文路径必须得设置engine参数;
文件为gbk格式的csv,若不设置encoding参数,会报错,并且文件路径带有中文,需要设置engine参数,不然也会报错;
pd.read_csv(filepath_or_buffer, sep=’, ‘, delimiter=None, header=’infer’, names=None,
index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True,
dtype=None, engine=None, converters=None, true_values=None, false_values=None,
skipinitialspace=False, skiprows=None, nrows=None, na_values=None, keep_default_na=True,
na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False,
infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False,
iterator=False, chunksize=None, compression=’infer’, thousands=None, decimal=b’.’,
lineterminator=None, quotechar=’”’, quoting=0, escapechar=None,
comment=None, encoding=None, dialect=None, tupleize_cols=None, error_bad_lines=True,
warn_bad_lines=True, skipfooter=0, skip_footer=0, doublequote=True, delim_whitespace=False
, as_recarray=None, compact_ints=None, use_unsigned=None, low_memory=True,
buffer_lines=None, memory_map=False, float_precision=None)
常见参数解释:
-
filepath_or_buffer : 路径 URL 可以是http, ftp, s3, 和 file.
-
sep: 指定分割符,默认是’,’C引擎不能自动检测分隔符,但Python解析引擎可以
-
delimiter: 同sep
-
delimiter_whitespace: True or False 默认False, 用空格作为分隔符等价于spe=’\s+’如果该参数被调用,则delimite不会起作用
-
header: 指定第几行作为列名(忽略注解行),如果没有指定列名,默认header=0; 如果指定了列名header=None
-
names 指定列名,如果文件中不包含header的行,应该显性表示header=None
-
index_col: 默认为None 用列名作为DataFrame的行标签,如果给出序列,则使用MultiIndex。如果读取某文件,该文件每行末尾都有带分隔符,考虑使用index_col=False使panadas不用第一列作为行的名称。
-
usecols: 默认None 可以使用列序列也可以使用列名,如 [0, 1, 2] or [‘foo’, ‘bar’, ‘baz’],选取的列
-
as_recarray:默认False , 将读入的数据按照numpy array的方式存储,0.19.0版本后使用 pd.read_csv(…).to_records()。 注意,这种方式读入的na数据不是显示na,而是给以个莫名奇妙的值
-
squeeze: 默认为False, True的情况下返回的类型为Series
-
prefix:默认为none, 当header =None 或者没有header的时候有效,例如’x’ 列名效果 X0, X1, …
-
mangle_dupe_cols :默认为True,重复的列将被指定为’X.0’…’X.N’,而不是’X’…’X’。如果传入False,当列中存在重复名称,则会导致数据被覆盖。
-
dtype: E.g. {‘a’: np.float64, ‘b’: np.int32} 指定数据类型
-
engine: {‘c’, ‘python’}, optional 选择读取的引擎目前来说C更快,但是Python的引擎有更多选择的操作
-
skipinitialspace: 忽略分隔符后的空格,默认false,
-
skiprows: list-like or integer or callable, default None 忽略某几行或者从开始算起的几行
-
skipfooter: 从底端算起的几行,不支持C引擎
-
nrows: int 读取的行数
-
na_values: 默认None 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’. 都表现为NAN
-
keep_default_na: 如果na_values被定义,keep_default_na为False那么默认的NAN会被改写。 默认为True
-
na_filter: 默认为True, 针对没有NA的文件,使用na_filter=false能够提高读取效率
-
skip_blank_lines 默认为True,跳过blank lines 而且不是定义为NAN
-
thousands 千分位符号,默认‘,’
-
decimal 小数点符号,默认‘.’
-
encoding: 编码方式
-
memory_map如果为filepath_or_buffer提供了文件路径,则将文件对象直接映射到内存上,并直接从那里访问数据。使用此选项可以提高性能,因为不再有任何I / O开销。
-
low_memory 默认为True 在块内部处理文件,导致分析时内存使用量降低,但可能数据类型混乱。要确保没有混合类型设置为False,或者使用dtype参数指定类型。请注意,不管怎样,整个文件都读入单个DataFrame中,请使用chunksize或iterator参数以块形式返回数据。 (仅在C语法分析器中有效)
例如:
import pandas as pd
import numpy as np
dtype={'open':np.float64,'close':np.float64,
'high':np.float64,'low':np.float64,
'vol':np.float64,'amount':np.float64
}
data = pd.read_csv('C:/Users/chepengyuan/Desktop/数学建模作业/袁泉布置的第四次小作业/000004.csv',dtype=dtype,converters={'date':str},engine='python')#读取
data
date | open | close | high | low | vol | amount | |
---|---|---|---|---|---|---|---|
0 | 2016/1/4 | 45.90 | 41.31 | 46.60 | 41.31 | 22832.0 | 97674000.0 |
1 | 2016/1/5 | 37.50 | 38.68 | 40.89 | 37.18 | 38835.0 | 150534000.0 |
2 | 2016/1/6 | 38.60 | 39.18 | 40.00 | 38.00 | 21146.0 | 82579000.0 |
3 | 2016/1/7 | 38.50 | 35.26 | 38.50 | 35.26 | 4568.0 | 16516000.0 |
4 | 2016/1/8 | 35.13 | 35.48 | 36.50 | 31.73 | 30773.0 | 107197000.0 |
... | ... | ... | ... | ... | ... | ... | ... |
679 | 2019/8/9 | 18.35 | 18.14 | 18.42 | 18.13 | 3199.0 | 5839597.0 |
680 | 2019/8/12 | 18.15 | 18.27 | 18.38 | 18.12 | 3123.0 | 5683728.5 |
681 | 2019/8/13 | 18.03 | 18.11 | 18.19 | 18.03 | 1863.0 | 3373144.0 |
682 | 2019/8/14 | 18.19 | 18.45 | 18.45 | 18.19 | 5190.0 | 9523593.0 |
683 | 2019/8/15 | 18.13 | 19.09 | 19.14 | 18.13 | 7422.0 | 13861910.0 |
684 rows × 7 columns