读取/写入数据
读取/写入表格型文本文件
现在推荐都使用
read_csv
来读取一定分隔符分隔的数据,read_table
函数将被废弃.
-
read_csv
函数: 读取csv文件, 是指默认使用逗号,
分隔的数据文件. 参数众多, 常用的参数如下:-
filepath_or_buffer
, 主参, 必须. 接受文件路径, URL(字符串), 文件类对象(包括StringIO) -
sep
: 指定分隔符, 默认,
. 如果分隔符指定为\t
, 则等于read_table
. 甚至可以用正则. 和delimiter
等价 -
dtype
: 指定数据类型, 可以单类型, 可以是字典, 如{'a':np.float64,'b':np.int.32}
. -
header
: 设置标题(列名)所在的行号并从该行以后读取数据.None
不读取标题,0
则第一行为标题.
默认是'infer'
:使用names
指定标题时,header=None
(指明不读取标题行), 没有则为0
.
使用明确的0
可以压制names
. 甚至可以是list
型(较复杂用法). -
names
: 指定标题(列名). array类数据. -
index_col
: 指定索引列. 指定的列的内容会被作为行名. 一般使用整形或字符串,也可以列表(层次化索引). 索引列的名称会单独一行标题. -
skip_rows
: 跳过某些行. (int,list或者callable, callable时行号输入,当返回True就跳过) -
nrows
: 指定读取的行数 (int型). 对于读取部分文件时用. -
skip_footer
:需要忽略的行数(从文件末尾开始计算) -
na_values
: 添加新的值作为NaN. 默认有多种,如NAN,null, NA, N/A, -1.#IND, -1.#QNAN
等. 可以是字符串, 列表, 甚至是字典(比较复杂) -
converters
: 转换数值, 使用字典, 如{'a':funcA}
. 会压制dtype
. -
comment
:该字符以后的会被作为注释而被忽略(指定为一个字符)。和空行一样会被header跳过,但不影响skiprows
-
skip_blank_lines
: 跳过空行, 缺省True. 否则,会被作为NaN. -
iterator
:返回一个TextParser以便逐块读取文件。 -
chunksize
:文件块的大小(用于迭代)。 -
verbose
:打印各种解析器输出信息,如“非数值列中的缺失值的数量”等。 -
encoding
:用于unicode的文本编码格式。例如,"utf-8"或"gbk"等文本的编码格式。 -
squeeze
:如果数据经过解析之后只有一列的时候,返回Series。 -
thousands
:千分位分隔符,如","或"."。 -
decimal
: 小数分割符, 默认.
. -
dayfirst
:当解析有歧义的日期时,将其看做国际格式(例如,7/6/2012 ---> June 7 , 2012)。默认为False。 -
date_parser
:用于解析日期的函数。 -
keep_date_col
:如果连接多列解析日期,则保持参与连接的列。默认为False。 -
parse_dates
:尝试将数据解析为日期,默认为False。如果为True,则尝试解析所有列。除此之外,参数可以指定需要解析的一组列号或列名。
如果列表的元素为列表或元组,就会将多个列组合到一起再进行日期解析工作。 -
compression
: 压缩文件, 缺省"infer"
,可以指定gzip
,bz2
,zip
,xz
等.
-
-
read_table
函数: 读取文件, 默认以制表符\t
分隔的数据文件. 即将被废弃, 使用read_csv
代替. -
read_fwf
函数: 以固定长度的形式读取文件.-
colspecs
: 元组(int,int)
或'infer'
的列表。可选的一个元组列表,给出每行固定宽度字段的范围为半开间隔(即[from,to[
)。
字符串值'infer'
可用于指示解析器尝试从未通过skiprows(default ='infer')
跳过的数据的前100行检测列规范。 -
widths
: int的列表,可选. 如果间隔是连续的,则可以使用字段宽度列表(list)代替'colspecs'。 -
infer_nrows
:int,默认为100. 让解析器确定colspecs时要考虑的行数。
-
# 可以使用多个键作为行索引(同理列索引也可以多重)
'''
key1,key2,value1,value2
a,a,1,2
a,b,3,4
b,c,5,6
b,d,7,8
'''
data = pd.read_csv("data.txt",index_col=["key1","key2"])
print(data)
'''
value1 value2
key1 key2
a a 1 2
b 3 4
b c 5 6
d 7 8
'''
# 指定某一列的数据类型
pd.read_csv("data.txt", dtype={2:np.float64,3:'People'})
# 使用正则表达式作为分隔符, 例如下面会将单个或多个空格类符号作为分隔符.
pd.read_csv("data.txt",sep="\s+")
# 只将某些列的某些值作为NaN, 使用字典.
data1 = pd.read_csv("data.txt",na_values={'name':['python','c++']})
# 位置 1 6 11 20 24 33 37 43
data=' id8141 360.242940 149.910199 11950.7\n' \
' id1594 444.953632 166.985655 11788.4\n' \
' id1849 364.136849 183.628767 11806.2\n' \
' id1230 413.836124 184.375703 11916.8\n' \
' id1948 502.953953 173.237159 12468.3'
colspecs = [(1, 7), (11, 21), (24, 34), (37, 44)] #栏位严格的位置
pd.read_fwf(pd.io.common.StringIO(data), colspecs=colspecs, header=None, index_col=0)
colspecs = [(0, 10), (11, 21), (24, 34), (37, 44)] # 实际数据前后包含部分空格不影响.
pd.read_fwf(pd.io.common.StringIO(data), widths=[8,13,13,11], header=None) # 使用width指定长度.
pd.read_fww(pd.io.common.StringIO(data), header=None) # 用前100行来推断, 结果同上.
读取 JSON格式
读取Excel格式
读取SQL
-
read_sql_table(table_name, con[, schema, …]
: 读取SQL数据库table到df. -
read_sql_query(sql, con[, index_col, …])
: 读取SQL查询的结果到df. -
read_sql(sql, con[, index_col, …])
: Read SQL query or database table into a DataFrame.
import pandas as pd
import sqlite3
# Read sqlite query results into a pandas DataFrame
con = sqlite3.connect("data/portal_mammals.sqlite")
df = pd.read_sql_query("SELECT * from surveys", con)
# Verify that result of SQL query is stored in the dataframe
print(df.head())
con.close()
其他格式
-
read_pickle
: 读取pickle出来的pandas对象 -
read_clipboard([sep])
: 读取剪贴板数据(实际使用read_csv) -
read_sas
: 读取SAS文件(XPORT/SAS7BDAT格式) -
read_gbq
: 读取Google BigQuery -
read_stata
: 读取 STATA文件. -
read_parquet
: 读取 parquet对象
网友评论