pandas读写excel文件和csv文件

机器学习基础—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王益20161840290
1时年19161840198
2柳琴21161830289
3萨蒂20161830188

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
dateopenclosehighlowvolamount
02016/1/445.9041.3146.6041.3122832.097674000.0
12016/1/537.5038.6840.8937.1838835.0150534000.0
22016/1/638.6039.1840.0038.0021146.082579000.0
32016/1/738.5035.2638.5035.264568.016516000.0
42016/1/835.1335.4836.5031.7330773.0107197000.0
........................
6792019/8/918.3518.1418.4218.133199.05839597.0
6802019/8/1218.1518.2718.3818.123123.05683728.5
6812019/8/1318.0318.1118.1918.031863.03373144.0
6822019/8/1418.1918.4518.4518.195190.09523593.0
6832019/8/1518.1319.0919.1418.137422.013861910.0

684 rows × 7 columns


匿名

发表评论

匿名网友