常用的数据存储介质是数据库和csv文件,pandas模块包含了相应的API对数据进行输入和输出:

  • 对于格式化的平面文件:read_table()
  • 对于csv文件:read_csv()、to_csv()
  • 对于SQL查询:read_sql、to_sql()

一,平面文件

把按照界定符分割的格式化文件读取到DataFrame中,使用read_table()函数来实现:

pandas.read_table(
filepath_or_buffer: Union[str, pathlib.Path], sep='\t', 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, skipfooter=0,
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,
cache_dates=True, iterator=False, chunksize=None, compression='infer', thousands=None, decimal=b'.',
lineterminator=None, quotechar='"', quoting=0, doublequote=True, escapechar=None, comment=None,
encoding=None, float_precision=None, ...)

重要参数注释:

  • filepath_or_buffer :str,文件的路径
  • sep:str,默认值是'\t',用于分割数据列的界定符。如果分隔符大于一个字符,那么sep参数将会被解释为正则表达式。
  • delimiter:str、默认值是None,是sep的别名
  • header:int,默认值是infer(推断),表示列名所在的数据行的行号。默认值是推断列名,如果names参数是None,那么推荐header=0,把文件的第一行作为列名;如果显式传递names参数,那么推荐header=None。
  • names:array-like,可选,列名的列表,默认值是None。如果文件不包含标题(header)行,应该显式设置header=None,并在names参数中传递数据列。
  • index_col :int,str,用于表示作为DataFrame的行标签的列号或列名,如果设置为False,表示强制DataFrame不把第一列作为索引。
  • usecols :list-like,返回列的子集
  • squeeze :bool,默认值是False,如果解析的数据只包含一列,那么把数据框转换为Series
  • prefix:str,如果没有标题,在列号前面添加的前缀
  • mangle_dupe_cols:bool,默认值是True,重复的列名X将会被命名为‘X’, ‘X.1’, …’X.N’,如果设置为False,重名的列会被重写。
  • dtype:dict,以字典结构来设置数据列的数据类型,例如,{‘col1’: np.float64, ‘col2’: np.int32, ‘col3’: ‘Int64’}
  • engine :用于解析文件的引擎,有效值是c’, ‘python’,C引擎更快,python引擎功能更强。
  • converters :dict,key是列号或列标签,value是用于转换值(key代表的列值)的函数
  • true_values :list,视为True的值
  • false_values :list,视为False的值
  • skipinitialspace:
  • skiprows : 在读取数据之前跳过的数据行数
  • skipfooter :从文件底部跳过的数据行数
  • nrows :读取的数据行数量
  • na_values :str、list-like,新增被识别为NA的字符
  • keep_default_na :bool,默认值是True,在解析数据时,是否包含默认的NaN值,该行为依赖于参数na_values。
    • 当keep_default_na是True,并且指定na_values参数的值,那么把na_values中字符串和NaN解析为NA值。
    • 当keep_default_na是True,并且未指定na_values参数的值,那么只把NaN解析为NA值。
    • 当keep_default_na是False,并且指定na_values参数的值,那么只把na_values指定的字符串解析为NA值。
    • 当keep_default_na是False,并且未指定na_values参数的值,那么没有字符串会被解析为NA值。
  • na_filter :bool,默认值是True,检测缺失值标记(空字符串和na_values的值)。 在没有任何NA的数据中,传递na_filter = False可以提高读取大文件的性能。当设置为False时,不检测数据中的缺失值,此时,参数keep_default_na 和na_values会被忽略。
  • verbose:bool,默认值是False,不指示放置在非数字列中的NA值的数量。
  • skip_blank_lines :bool,默认值是True,跳过空行,而不是把空行解析为NaN值
  • parse_dates :bool,default false,解析日期:
    • bool,如果是True,把日期解析为索引
    • list of int or names, 列号或列名构成的列表,把列解析为单独的date 列
    • list of list,或者dict,把做个列组合在一起解析为date列
  • infer_datetime_format :是否推断字符串表示的日期格式,默认值是false。如果设置为True,并且启用parse_dates,那么pandas将会根据列中的字符串来推荐日期/时间的格式
  • keep_date_col :bool,default False,如果设置为True,并且parse_dates指定组合多个列作为日期/时间列,那么保留原始列。
  • date_parser :用于指定解析日期的函数
  • dayfirst :bool,default False,是否把day放在月份前面,例如,DD/MM/YYYY
  • cache_dates :bool,default True,如果设置为True,那么使用唯一的转换日期缓存来应用datetime的转换。当数据中存在大量重复的日期字符串时,可以大幅度提高解析速度。
  • iterator :bool,default False,是否返回TextFileReader对象的迭代器
  • chunksize :int,TextFileReader对象的块大小
  • compression :指定文件的压缩格式,有效值是‘infer’, ‘gzip’, ‘bz2’, ‘zip’, ‘xz’, None, default ‘infer’,用于对文件进行解压缩
  • thousands :str,千分隔符
  • decimal :str,default '.',识别为小数点的字符
  • lineterminator :行分隔符,仅用于C parser
  • quotechar :str (length 1),用于表示引用项目的开始和结束的字符。引用的项目可以包括定界符,当界定符包含在引用的项目中时,该界定符被忽略。
  • quoting :int 或csv.QUOTE_* 选项, default 0,QUOTE_MINIMAL (0), QUOTE_ALL (1), QUOTE_NONNUMERIC (2) or QUOTE_NONE (3)
  • doublequote:bool,default True,当指定quotechar且引用不是QUOTE_NONE时,指示是否将一个字段内的两个连续quotechar元素解释为单个quotechar元素。
  • escapechar  :str (length 1),转义字符
  • comment :str,注释的开始字符,例如,设置comment参数='#',当一行的开头是#时,则该行是注释行;当一行中间位置出现#时,该行后续的字符是注释,不再解析。
  • encoding :编码规则,常用的编码是utf-8
  • float_precision :指定C引擎转为浮点数的精度,有效值是None、high、round_trip。

二,CSV文件

CSV文件属于平面文件,大部分参数和read_table是相同的,csv文件中存储的数据以逗号为字段分隔符,以回车换行为行分隔符,pandas使用read_csv()函数来读取csv文件,用to_csv()函数把数据存储为csv。

1,read_csv()函数 用于读取CSV文件

read_csv()函数的参数非常多,

pandas.read_csv(filepath_or_buffer, sep=', ', delim_whitespace=False,
header='infer', names=None, index_col=None, usecols=None,...)

下面主要介绍最常用的参数:

  • filepath_or_buffer:文件的路径
  • sep=', ':字段的分隔符,默认值是逗号
  • header='infer':字段名称所在的行号,默认值是infer,表示推断列名,推断列名的逻辑是:如果names字段没有传递值,那么header='infer'等价于header=0,从文件的第一行中获取值作为列名;如果names字段传递值,那么header='infer'等价于header=None,使用names参数传递的值作为列名。
  • names=None:包含列名的列表,列名不能重复。
  • index_col=None:索引列的序号,传递index_col=False强制pandas不要使用第一列作为索引(row name)
  • usecols=None:返回列的子集

2,to_csv()函数用于把数据写入到CSV文件中

to_csv()函数用于把数据写入到csv文件中

DataFrame.to_csv(self,
path_or_buf=None, sep=', ', na_rep='', float_format=None, columns=None, header=True, index=True
, index_label=None, mode='w', encoding=None, compression='infer', quoting=None, quotechar='"'
, line_terminator=None, chunksize=None, date_format=None, doublequote=True, escapechar=None, decimal='.')

重要参数注释:

  • na_rep:用什么字符来表示缺失值
  • float_format:格式化字符串来表示浮点数
  • columns:要输出的列,默认值是None,输出所有的列
  • header:是否输出列名,默认值是True
  • index:是否输出行索引(row names),默认值是True
  • index_label:
  • mode:写模式
  • encoding:编码规则,默认值是utf-8
  • compression:压缩模式:'infer','gzip','bz2','zip','xz',None,如果设置为“infer”和path_or_buf包含“.gz”,“.bz2”,“.zip”或“ .xz”扩展名,那么会自动推断压缩模式,否则不压缩。
  • line_terminator:换行符,默认值是os.linesep
  • chunksize:一次写入的行数
  • date_format:格式化输出日期类型

三,SQL查询

执行SQL查询,把数据写入到DataFrame对象中,或者把DataFrame对象中的数据写入到数据库中。

1,执行SQL查询,把数据写入到DataFrame对象中

read_sql()函数用于执行SQL查询或Table,read_sql_query()用于执行SQL查询,read_sql_table()用于查询Table,把数据写入到DateFrame对象中:

pandas.read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)
pandas.read_sql_query(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, chunksize=None)
pandas.read_sql_table(table_name, con, schema=None, index_col=None, coerce_float=True, parse_dates=None, columns=None, chunksize=None)

参数注释:

  • sql:SQL查询
  • con:连接,sqlalchemy的engine对象
  • index_col:用于指定索引列的名称,默认值是None
  • coerce_float:尝试把非字符串、非数字类型的值转换为浮点类型
  • parse_dates :list 或dict
    • list of column names:把指定的列解析为date
    • Dict of {column_name: format string}:把指定的列按照特定的格式解析为date
  • columns:list,从表中select的列
  • chunksize:int,如果指定,则返回一个迭代器,chunksize表示每个chunk中包含的行数

2,to_sql()

把数据写入到数据库中的表中:

DataFrame.to_sql(name, con, schema=None, if_exists='fail', index=True, index_label=None, dtype=None, chunksize=None, method=None)

参数注释:

  • name:把数据插入的目的表的名称
  • con:连接,sqlalchemy的engine对象
  • schema=None:指定数据库的架构,例如,mysql
  • if_exists='fail':如果关系表存在,当值为fail时,pandas抛出错误;当值为replace时,删除旧表,创建新表;当值为append时,向表中插入新的数据;
  • index=True:把DataFrame的索引作为一列,把index_label作为索引列的名称
  • index_label:索引列的名称,如果设置为None,并且index参数设置为True,那么索引的name属性作为索引列名。
  • dtype:dict,为列指定的数据类型,字典的key是列名,字典的value是数据类型。
  • chunksize:批量写入时每个batch包含色数据行数量,默认情况下,一次性写入所有的数据行
  • method:插入数据的方法,默认值是None,一次插入一行;multi是指一次插入多行数据,

举个例子,从一个数据库中查询数据,插入到SQL Server数据库中:

import pymssql
import pandas as pd
from sqlalchemy import create_engine con=psycopg2.connect(dbname= 'db_name', host='db_host', port= '', user= '', password= '')
engine=create_engine('mssql+pymssql://user:password@host/db_name?charset=utf8',echo=False) sql=""" select ... """ data_frame = pd.read_sql(sql, con)
data_frame.to_sql('out_table', con=engine, if_exists='append',index = False, schema='dbo')

参考文档:

pandas Input/Output

Pandas 学习 第9篇:DataFrame - 数据的输入输出的更多相关文章

  1. pandas学习(创建多层索引、数据重塑与轴向旋转)

    pandas学习(创建多层索引.数据重塑与轴向旋转) 目录 创建多层索引 数据重塑与轴向旋转 创建多层索引 隐式构造 Series 最常见的方法是给DataFrame构造函数的index参数传递两个或 ...

  2. pandas 学习 第5篇:DataFrame - 访问数据框

    数据框是用于存储数据的二维结构,分为行和列,一行和一列的交叉位置是一个cell,该cell的位置是由行索引和列索引共同确定的.可以通过at/iat,或loc/iloc属性来访问数据框的元素,该属性后跟 ...

  3. pandas 学习 第7篇:DataFrame - 数据处理(应用、操作索引、重命名、合并)

    DataFrame的这些操作和Series很相似,这里简单介绍一下. 一,应用和应用映射 apply()函数对每个轴应用一个函数,applymap()函数对每个元素应用一个函数: DataFrame. ...

  4. pandas 学习 第6篇:DataFrame - 数据处理(长宽格式、透视表)

    长宽格式的转换 宽格式是指:一列或多列作为标识变量(id_vars),其他变量作为度量变量(value_vars),直观上看,这种格式的数据比较宽,举个列子,列名是:id1.id2.var1.var2 ...

  5. pandas 学习 第14篇:索引和选择数据

    数据框和序列结构中都有轴标签,轴标签的信息存储在Index对象中,轴标签的最重要的作用是: 唯一标识数据,用于定位数据 用于数据对齐 获取和设置数据集的子集. 本文重点关注如何对序列(Series)和 ...

  6. Python 学习 第十三篇:数据的读写-文件、DataFrame、json

    Python的文件是一个重要的对象,使用open()函数来打开文件,创建文件对象,进行文件的读写操作.当数据用于交换信息时,通常需要把数据保存为有格式的文本数据,可以保存为有特定的行分隔符和列分隔符的 ...

  7. Pandas系列(二)- DataFrame数据框

    一.初识DataFrame dataFrame 是一个带有索引的二维数据结构,每列可以有自己的名字,并且可以有不同的数据类型.你可以把它想象成一个 excel 表格或者数据库中的一张表DataFram ...

  8. pandas 学习 第8篇:Index 对象 - (创建、转换、排序)

    Index对象负责管理轴标签.轴名称等元数据,是一个不可修改的.有序的.可以索引的ndarry对象.在构建Sereis或DataFrame时,所用到的任何数据或者array-like的标签,都会转换为 ...

  9. pandas 学习 第3篇:Series - 数据处理(应用、分组、滚动、扩展、指数加权移动平均)

    序列内置一些函数,用于循环对序列的元素执行操作. 一,应用和转换函数 应用apply 对序列的各个元素应用函数: Series.apply(self, func, convert_dtype=True ...

随机推荐

  1. Web前端基础(1):HTML(一)

    1. HTML概述 1.1 什么是HTML HTML称为超文本标记语言,是一种标识性的语言.它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体.H ...

  2. ArrayList、LinkedList和Vector的源码解析,带你走近List的世界

    java.util.List接口是Java Collections Framework的一个重要组成部分,List接口的架构图如下: 本文将通过剖析List接口的三个实现类——ArrayList.Li ...

  3. 一则SQL优化案例

    原始sql: select CASE ) counts ,) else deadline end as deadline from t_product_credit) c group by sort ...

  4. .NET MVC后台获得VIEW对应的html

    一..Net Core Mvc下获得 建立一个帮助类,如下: using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Render ...

  5. DIY客户端框架

    C/S类型的客户端做过好多轮了,在架构上每次都调整优化一部分,慢慢的形成了DIY的框架性东西. 可是最近这一看呢,已经不像MVC了,然后有一天看到了MVP概念,咦!很像.再一看,嗯,就该是MVP. M ...

  6. 教你如何添加Xcode 9.3配置包?(安装流程可供其他版本安装参考)

    1.准备好你想要的Xcode版本的安装包 ,这里以Xcode 9.3为例.                        →                   2.打开Xcode开发工具的安装路径 ...

  7. nRF24L01+如何检测信道被占用-RSSI寄存器实战分享

    检测信道占用的需求场景 在使用nRF24L01模块做一对多或多对一的组网通信中,大家都会担心一个问题就是在发送的时候,希望不要有其他的模块也进行发送,因为这样就会使无线信号发生碰撞,信道被堵塞,造成通 ...

  8. 030.[转] sql事务特性

    sql事务特性简介 pphh发布于2018年10月5日 Sql事务有原子性.一致性.隔离性.持久性四个基本特性,要实现完全的ACID事务,是以牺牲事务的吞吐性能作为代价的.在有些应用场景中,通过分析业 ...

  9. [Linux] SSH隧道本地端口转发访问远程服务中的数据库

    当我的本地没有安装任何数据库服务的时候,可以直接通过我本地的端口访问远程机器上的数据库服务,实现这样的效果就可以使用本地转发功能 实际测试本地端口转发,把本地的9006端口转发给远程服务器的115.1 ...

  10. jQuery的配置。

    在python中有提前定义模板的功能,所以提前将jQuery的导入语句导入就可以直接使用jQuery语法: 一.下载jQuery包. 下载官网: https://jquery.com/ 可下载迷你版的 ...