Python一周一模块:pandas-2
2019-06-21 本文已影响6人
爱折腾的大懒猪
读取/写入数据
读取/写入表格型文本文件
现在推荐都使用
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对象