• 欢迎来到小爱博客,一个分享互联网IT技术的网站,喜欢就收藏吧!

pandas读写txt csv文件详解

python 小爱 3个月前 (07-29) 57次浏览 已收录 0个评论 扫描二维码

pandas读取txt文件

读取txt文件需要确定txt文件是否符合基本的格式,也就是是否存在\t,,,等特殊的分隔符

一般txt文件长成这个样子

txt文件举例

下面的文件为空格间隔

1 2019-03-22 00:06:24.4463094 中文测试 
2 2019-03-22 00:06:32.4565680 需要编辑encoding 
3 2019-03-22 00:06:32.6835965 ashshsh 
4 2017-03-22 00:06:32.8041945 eggg

读取命令采用 read_csv或者 read_table都可以

import pandas as pd
df =  pd.read_table("./test.txt")
print(df)

import pandas as pd
df =  pd.read_csv("./test.txt")
print(df)

但是,注意,这个地方读取出来的数据内容为3行1列的DataFrame类型,并没有按照我们的要求得到3行4列

import pandas as pd
df =  pd.read_csv("./test.txt")
print(type(df))
print(df.shape)

<class 'pandas.core.frame.DataFrame'>
(3, 1)

read_csv函数

默认: 从文件、URL、文件新对象中加载带有分隔符的数据,默认分隔符是逗号。

上述txt文档并没有逗号分隔,所以在读取的时候需要增加sep分隔符参数

df =  pd.read_csv("./test.txt",sep=' ')

参数说明,官方Source : https://github.com/pandas-dev/pandas/blob/v0.24.0/pandas/io/parsers.py#L531-L697

中文说明以及重点功能案例

参数 中文释义
filepath_or_buffer 可以是URL,可用URL类型包括:http, ftp, s3和文件,本地文件读取实例:file://localhost/path/to/table.csv
sep str类型,默认’,’ 指定分隔符。如果不指定参数,则会尝试使用默认值逗号分隔。分隔符长于一个字符并且不是‘\s+’,将使用python的语法分析器。并且忽略数据中的逗号。正则表达式例子:’\r\t’
delimiter 定界符,备选分隔符(如果指定该参数,则sep参数失效) 一般不用
delimiter_whitespace True or False 默认False, 用空格作为分隔符等价于spe=’\s+’如果该参数被调用,则delimite不会起作用
header 指定第几行作为列名(忽略注解行),如果没有指定列名,默认header=0; 如果指定了列名header=None
names 指定列名,如果文件中不包含header的行,应该显性表示header=None ,header可以是一个整数的列表,如0,1,3。未指定的中间行将被删除(例如,跳过此示例中的2行)
index_col(案例1) 默认为None 用列名作为DataFrame的行标签,如果给出序列,则使用MultiIndex。如果读取某文件,该文件每行末尾都有带分隔符,考虑使用index_col=False使panadas不用第一列作为行的名称。
usecols 默认None 可以使用列序列也可以使用列名,如 0, 1, 2 or ‘foo’, ‘bar’, ‘baz’ ,使用这个参数可以加快加载速度并降低内存消耗。
squeeze 默认为False, True的情况下返回的类型为Series,如果数据经解析后仅含一行,则返回Series
prefix 自动生成的列名编号的前缀,如: ‘X’ for X0, X1, … 当header =None 或者没有设置header的时候有效
mangle_dupe_cols 默认为True,重复的列将被指定为’X.0’…’X.N’,而不是’X’…’X’。如果传入False,当列中存在重复名称,则会导致数据被覆盖。
dtype 例子: {‘a’: np.float64, ‘b’: np.int32} 指定每一列的数据类型,a,b表示列名
engine 使用的分析引擎。可以选择C或者是python,C引擎快但是Python引擎功能更多一些
converters(案例2) 设置指定列的处理函数,可以用”序号”也可以使用“列名”进行列的指定
true_values / false_values 没有找到实际的应用场景,备注一下,后期完善
skipinitialspace 忽略分隔符后的空格,默认false
skiprows 默认值 None 需要忽略的行数(从文件开始处算起),或需要跳过的行号列表(从0开始)
skipfooter 从文件尾部开始忽略。 (c引擎不支持)
nrows 从文件中只读取多少数据行,需要读取的行数(从文件头开始算起)
na_values 空值定义,默认情况下, ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’, ‘-NaN’, ‘-nan’, ‘1.#IND’, ‘1.#QNAN’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘n/a’, ‘nan’, ‘null’. 都表现为NAN
keep_default_na 如果指定na_values参数,并且keep_default_na=False,那么默认的NaN将被覆盖,否则添加
na_filter 是否检查丢失值(空字符串或者是空值)。对于大文件来说数据集中没有N/A空值,使用na_filter=False可以提升读取速度。
verbose 是否打印各种解析器的输出信息,例如:“非数值列中缺失值的数量”等。
skip_blank_lines 如果为True,则跳过空行;否则记为NaN。
parse_dates 有如下的操作1. boolean. True -> 解析索引2. list of ints or names. e.g. If 1, 2, 3 -> 解析1,2,3列的值作为独立的日期列;3. list of lists. e.g. If [1, 3] -> 合并1,3列作为一个日期列使用 4. dict, e.g. {‘foo’ : 1, 3} -> 将1,3列合并,并给合并后的列起名为”foo”
infer_datetime_format 如果设定为True并且parse_dates 可用,那么pandas将尝试转换为日期类型,如果可以转换,转换方法并解析。在某些情况下会快5~10倍
keep_date_col 如果连接多列解析日期,则保持参与连接的列。默认为False
date_parser 用于解析日期的函数,默认使用dateutil.parser.parser来做转换。Pandas尝试使用三种不同的方式解析,如果遇到问题则使用下一种方式。1.使用一个或者多个arrays(由parse_dates指定)作为参数;2.连接指定多列字符串作为一个列作为参数;3.每行调用一次date_parser函数来解析一个或者多个字符串(由parse_dates指定)作为参数。
dayfirst DD/MM格式的日期类型
iterator 返回一个TextFileReader 对象,以便逐块处理文件。
chunksize 文件块的大小
compression 直接使用磁盘上的压缩文件。如果使用infer参数,则使用 gzip, bz2, zip或者解压文件名中以‘.gz’, ‘.bz2’, ‘.zip’, or ‘xz’这些为后缀的文件,否则不解压。如果使用zip,那么ZIP包中国必须只包含一个文件。设置为None则不解压。
新版本0.18.1版本支持zip和xz解压
thousands 千分位符号,默认‘,’
decimal 小数点符号,默认‘.’
lineterminator 行分割符,只在C解析器下使用
quotechar 引号,用作标识开始和解释的字符,引号内的分割符将被忽略
quoting 控制csv中的引号常量。可选 QUOTE_MINIMAL (0), QUOTE_ALL (1), QUOTE_NONNUMERIC (2) or QUOTE_NONE (3)
doublequote 双引号,当单引号已经被定义,并且quoting 参数不是QUOTE_NONE的时候,使用双引号表示引号内的元素作为一个元素使用。
escapechar 当quoting 为QUOTE_NONE时,指定一个字符使的不受分隔符限值。
comment 标识着多余的行不被解析。如果该字符出现在行首,这一行将被全部忽略。这个参数只能是一个字符,空行(就像skip_blank_lines=True)注释行被header和skiprows忽略一样。例如如果指定comment=’#’ 解析‘#empty\na,b,c\n1,2,3’ 以header=0 那么返回结果将是以’a,b,c’作为header
encoding 编码方式,指定字符集类型,通常指定为’utf-8′
dialect 如果没有指定特定的语言,如果sep大于一个字符则忽略。具体查看csv.Dialect 文档
error_bad_lines 如果一行包含太多的列,那么默认不会返回DataFrame ,如果设置成false,那么会将改行剔除(只能在C解析器下使用)
warn_bad_lines 如果error_bad_lines =False,并且warn_bad_lines =True 那么所有的“bad lines”将会被输出(只能在C解析器下使用)
low_memory 分块加载到内存,再低内存消耗中解析。但是可能出现类型混淆。确保类型不被混淆需要设置为False。或者使用dtype 参数指定类型。注意使用chunksize 或者iterator 参数分块读入会将整个文件读入到一个Dataframe,而忽略类型(只能在C解析器中有效)
delim_whitespace New in version 0.18.1: Python解析器中有效
memory_map 如果为filepath_or_buffer提供了文件路径,则将文件对象直接映射到内存上,并直接从那里访问数据。使用此选项可以提高性能,因为不再有任何I / O开销,使用这种方式可以避免文件再次进行IO操作
float_precision 指定C引擎应用于浮点值的转换器

小爱博客 , 版权所有
转载请注明原文链接:pandas读写txt csv文件详解
喜欢 (0)
【你的支持, 我的动力】
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址