文章数据
收藏(次)
【python数据分析】第六章 加载-存储-文件格式
读写文本格式的数据
--------------------------------------------------------------------------------
read_csv 从文件,URL,文件型对象加载,默认分隔符逗号
read_table 从文件,URL,文件型对象加载,默认分隔符tab
read_fwf 读取定宽列格式数据,无分隔符
read_clipboard 剪切板
read_excel excel
read_hdf HDF5
read_html Html的表格
read_json JSON
read_msgpack 二进制编码的pandas数据
read_pickle py pickle 格式存在的对象
read_sas SAS
read_sql 查询结果数据
read_stata stata文件格式数据
read_feather Feather二进制文件格式
--------------------------------------------------------------------------------
原始数据:py/ex1.csv
a,b,c,d,message
1,2,3,4,hello
5,6,7,8,world
9,10,11,12,foo
--------------------------------------------------------------------------------
import numpy as np
import pandas as pd
df = pd.read_csv('py/ex1.csv')
df 输出:
a b c d message
0 1 2 3 4 hello
1 5 6 7 8 world
2 9 10 11 12 foo
指定分隔符:
df2 = pd.read_table('py/ex1.csv', sep=',')
--------------------------------------------------------------------------------
read_csv 的定义:
pd.read_csv(
filepath_or_buffer: Union[str, pathlib.Path, IO[~AnyStr]],
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,
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: str = '.',
lineterminator=None,
quotechar='"',
quoting=0,
doublequote=True,
escapechar=None,
comment=None,
encoding=None,
dialect=None,
error_bad_lines=True,
warn_bad_lines=True,
delim_whitespace=False,
low_memory=True,
memory_map=False,
float_precision=None,
)
--------------------------------------------------------------------------------
原始数据: ex2.csv, 没有header
1,2,3,4,hello
5,6,7,8,world
9,10,11,12,foo
--------------------------------------------------------------------------------
pd.read_csv('py/ex2.csv') # 把第一行数据当成Header,
pd.read_csv('py/ex2.csv', header=None) # 告诉他没有 header
pd.read_csv('py/ex2.csv', names=['a', 'b', 'c', 'd', 'msg']) # 不告诉没有header,指定一个
输出:
a b c d msg
0 1 2 3 4 hello
1 5 6 7 8 world
2 9 10 11 12 foo
# ex1.csv 有header,再去指定一个names, 那他把文件的header当成一行数据
pd.read_csv('py/ex1.csv', names=['a', 'b', 'c', 'd', 'msg'])
# ex2.csv, 指定 header, 然后他默认给每行加从 0到n-1的索引,如果想指定原数据某列为索引 index_col 指定
pd.read_csv('py/ex2.csv', names=['a', 'b', 'c', 'd', 'msg'], index_col='msg')
# 指定多层索引,index_col=['msg', 'a']
pd.read_csv('py/ex2.csv', names=['a', 'b', 'c', 'd', 'msg'], index_col=['msg', 'a'])
--------------------------------------------------------------------------------
原始数据: py/ex3.csv,问题是,第一行的列少一个,空格分隔,空格数量不定
A B C
aaa -0.264438 -1.026059 -0.619500
bbb 0.927272 0.302904 -0.032399
ccc -0.264273 -0.386314 -0.217601
ddd -0.871858 -0.348382 1.100491
使用正则匹配不定量的空格,pandas 读取数据发现第一行少一个,推断出第二行到最后行的第1列是索引列
pd.read_csv('py/ex3.csv', sep='s+')
--------------------------------------------------------------------------------
数据中有些是注释,说明文字,表的表头等,这些分析时是不需要的,而且他们也没有格式,
跳过这些
pd.read_csv('examples/ex4.csv', skiprows=[0, 2, 3]) # 跳过这些行不要读
--------------------------------------------------------------------------------
如果数据缺失, 比如 1,2,,4 两个逗号中间没有数据,缺失了
默认读进来时 NAN
--------------------------------------------------------------------------------
原始数据 ex4.csv:
a,b,c,d,
1,2,3,,hello
5,6,7,8,world
9,10,11,12,foo
pd.read_csv('py/ex4.csv')
输出:
c1 c2 c3 c4 c5
0 a b c d NaN
1 1 2 3 NaN hello
2 5 6 7 8 world
3 9 10 11 12 foo
把指定的数据变成 NAN, 比如 c4列的 d 和 c5列的 foo
pd.read_csv('py/ex4.csv', na_values={'c4':['d'], 'c5':['foo']})
c1 c2 c3 c4 c5
0 a b c NaN NaN
1 1 2 3 NaN hello
2 5 6 7 8.0 world
3 9 10 11 12.0 NaN
# 把 c5 中的 值为 foo, na hello 的全部变成 nan
pd.read_csv('py/ex4.csv', na_values={'c4':['d'], 'c5':['foo','NA','hello']})
--------------------------------------------------------------------------------
read_csv/read_path 参数说明:
path 文件系统的位置,url, 文件对象字符串
sep/delimiter 分隔符,字符串,正则
header 用作列名的行号,默认为0,第一行,如果原没有header, 设置 header=None
index_col 指定原数据中的列为索引,可以 =[a,b,...] 时复合索引
names 自己指定列名,设置这个参数,相当于设置了 header=none
skiprows 过滤掉不要读取的行,从0开始
na_values 把指定的数替换成 nan
comment 用于将注释信息从行尾拆分出去的字符, 比如原始数据 c1,c2,c3,c4,c5 #aaa
后面的 #aaa 都是注释,comment='#', 这样 #及后面的都不要了
parse_dates 尝试解析日期,默认False,如果要解析,还要告诉,哪一列时日期
keep_data_col 如果连接多列解析日期,则保持参与连接的列,默认False
converters 对指定列执行某个函数,比如 {c1:fun}, 对c1列的元素执行 fun 方法
pd.read_csv('py/ex4.csv', skiprows=[1],
converters={'c1':lambda x:x*2 , 'c2':lambda x:x*2}) # 注意类型
dayfirst 当时间有歧义,看成国际时间 7/6/2012, 有歧义,看成 2012年6月7号, 默认 false
data_parser 解析日期的函数
nrows 读多少行,从文件开始算起
iterator 返回一个textoarse 以便逐块读取文件
chuncksize 文件块大小
skip_footer 文件结束前的行数会被忽略
~~~~~~~~~~~~~~~~
verbose 打印各种解析输出信息,
encoding 编码
squeeze 数据解析完成只有一列,返回 Series
thousands 千分位的分隔符如 , 比如: 9,999,999
--------------------------------------------------------------------------------
分享
收藏
点赞人
举报
文章标签
评论列表