读固定宽度数据 2018/12/27
目录:
第1部分:csv文本文件读写
pandas 读csv文件read_csv(1.文本读写概要)https://mp.csdn.net/postedit/85289371
pandas 读csv文件read_csv(2.read_csv参数介绍)https://mp.csdn.net/postedit/85289928
pandas 读csv文件read_csv(3.dtypes指定列数据类型)https://mp.csdn.net/postedit/85290575
pandas 读csv文件read_csv(4.to_csv文本数据写)https://mp.csdn.net/postedit/85290962
pandas 读csv文件read_csv(5.文本数据读写实例)https://mp.csdn.net/postedit/85291123
pandas 读csv文件read_csv(6.命名和使用列)https://mp.csdn.net/postedit/85291430
pandas 读csv文件read_csv(7.索引)https://mp.csdn.net/postedit/85291658
pandas 读csv文件read_csv(8.方言和分隔符)https://mp.csdn.net/postedit/85291994
pandas 读csv文件read_csv(9.浮点转换和NA值)https://mp.csdn.net/postedit/85292391
pandas 读csv文件read_csv(10.注释和空行)https://mp.csdn.net/postedit/85292609
pandas 读csv文件read_csv(11.日期时间处理) https://mp.csdn.net/postedit/85292925
pandas 读csv文件read_csv(12.迭代和块)https://mp.csdn.net/postedit/85293639
pandas 读csv文件read_csv(13.read_fwf读固定宽度数据)https://mp.csdn.net/postedit/85294010
第2部分:
pandas hdf文件读写简要https://mp.csdn.net/postedit/85294299
pandas excel读写简要https://mp.csdn.net/postedit/85294545
第3部分:
python中csv模块用法tcy https://mp.csdn.net/postedit/85228189
pandas读csv文件read_csv错误解决办法7种https://mp.csdn.net/postedit/85228808
pandas to_string用法https://mp.csdn.net/postedit/85294935
函数:
pd.read_fwf(filepath_or_buffer, colspecs='infer', widths=None, **kwds)
用途:
# 将固定宽度格式化的行表读入DataFrame;支持迭代或中断文件分块
参数:
# 函数参数read_fwf与read_csv大致相同,带有两个额外参数,delimiter参数的用法不同
filepath_or_buffer:str 含路径的文件名
# read()方法对象如文件句柄或StringIO
# URL:方案包括http,ftp,s3和文件。对于文件URL,需要主机。如本地文件://localhost/path/to/table.csv
colspecs:元祖列表或'infer'#给出固定宽度范围
#如[(1,7),(10,22),...]每个字段为半开区间即[int,int)
#字符串值'infer'可用于指示解析器尝试检测前100行的列规格
width:int列表
#字段宽度列表,如果间隔是连续的用于代替'colspecs'
delimiter:str,默认''+''
#要考虑作为固定宽度文件中的填充字符的字符。
#用于指定字段的填充字符例如不是空格用'〜'
返回:
# DataFrame或TextParser
实例1:colspecs指定字段位置
# 固定宽度数据文件:
# 位置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)
1 2 3
0
id8141 360.242940 149.910199 11950.7
id1594 444.953632 166.985655 11788.4
id1849 364.136849 183.628767 11806.2
id1230 413.836124 184.375703 11916.8
id1948 502.953953 173.237159 12468.3
colspecs = [(0, 7), (10, 21), (23, 34), (36, 44)] #字段前后可以包含一些空格
df = pd.read_fwf(pd.io.common.StringIO(data), colspecs=colspecs, header=None, index_col=0)#结果同上:
实例2:widths指定字段长度
# Widths are a list of integers
from io import StringIO
widths = [7, 14, 13, 10] #必须将数据前空白数量包含进来
pd.read_fwf(StringIO(data), widths=widths, header=None)
0 1 2 3
0 id8141 360.242940 149.910199 11950.7
1 id1594 444.953632 166.985655 11788.4
2 id1849 364.136849 183.628767 11806.2
3 id1230 413.836124 184.375703 11916.8
4 id1948 502.953953 173.237159 12468.3
实例3:用前100行数据自动推断数据
# 默认read_fwf尝试colspecs使用文件前100行来推断文件。
# 只能在列对齐并且delimiter分隔符为空格(默认)情况下执行
pd.read_fwf(StringIO(data), header=None, index_col=0)#结果同例1
# 指定列的数据类型
pd.read_fwf(StringIO(data), header=None, index_col=0).dtypes
1 float64
2 float64
3 float64
dtype: object
pd.read_fwf(StringIO(data), header=None, dtype={2: 'object'}).dtypes
0 object
1 float64
2 object
3 float64
dtype: object