1.在用pandas读csv文件时报错:

ParserError: Error tokenizing data. C error: Expected 52 fields in line 349255, saw 54.

打开文件一看,349255行52列数据中含有逗号

python 读取文本怎么去除其中的一些颜色 python读取数据去掉逗号_python


  因为csv文件本身是逗号分割,如果数据中含有逗号,在读的时候pandas不知该如何处理。解决方法有两种,第一个就是把数据处理,把数据中的逗号删去或者换成其他字符代替;第二种就是用read_csv方法中设置error_bad_lines=False来忽略这种错误:

import pandas as pd
df = pd.read_csv(filePath,error_bad_lines=False)
b'Skipping line 349255: expected 52 fields, saw 54\nSkipping line 349441: expected 52 fields, saw 54\nSkipping line 349466: expected 52 fields, saw 54\n'

此外,在读csv文件时还有一些常用的参数:
low_memory : 默认为True
分块加载到内存,再低内存消耗中解析。但是可能出现类型混淆。确保类型不被混淆需要设置为False。或者使用dtype 参数指定类型。注意使用chunksize 或者iterator 参数分块读入会将整个文件读入到一个Dataframe,而忽略类型(只能在C解析器中有效)如果不小心改成了False,chunksize参数不生效。
chunksize : int, default None
当数据量较大时,可以设置chunksize分块读取数据。
dtype : Type name or dict of column -> type, default None
每列数据的数据类型。例如 {‘a’: np.float64, ‘b’: np.int32}
有时候读取excel文件时,会自动把string类型的数字转换成float类型,比如’010’变成’10’,这时读取数据实加上dtype = ‘str’即可,如:df = pd,read_excel(‘test.xlsx’,dtype=‘str’)
engine : {‘c’, ‘python’}, optional
使用的分析引擎。可以选择C或者是python。C引擎快但是Python引擎功能更加完备。
sep : str, default ‘,’
指定分隔符。如果不指定参数,则会尝试使用逗号分隔。分隔符长于一个字符并且不是‘\s+’,将使用python的语法分析器。并且忽略数据中的逗号。正则表达式例子:‘\r\t’
delimiter : str, default None
定界符,备选分隔符(如果指定该参数,则sep参数失效)
header : int or list of ints, default ‘infer’
指定行数用来作为列名,数据开始行数。如果文件中没有列名,则默认为0,否则设置为None。如果明确设定header=0 就会替换掉原来存在列名。header参数可以是一个list例如:[0,1,3],这个list表示将文件中的这些行作为列标题(意味着每一列有多个标题),介于中间的行将被忽略掉(例如本例中的2;本例中的数据1,2,4行将被作为多级标题出现,第3行数据将被丢弃,dataframe的数据从第5行开始。)。
注意:如果skip_blank_lines=True 那么header参数忽略注释行和空行,所以header=0表示第一行数据而不是文件的第一行。

2. ParserError: field larger than field limit (131072)

文本内容长度过大导致,添加:
csv.field_size_limit(500 * 1024 * 1024)

3.保存csv数据注意事项

(1)如果数据中包含很多中文文本类数据(可能会有逗号),保存时的分割符最好设置为‘|’,编码设置为utf-8。

df_all.to_csv('test.csv',sep='|',encoding='utf-8',index=False,header=None)
# 如果要入库的话,要把表头去掉。

(2)文本较多的话也可能会包含很多换行符之类的,最好替换掉。

df_all=df_all.replace('\t','', regex=True).replace('\n','', regex=True)