python读取表数据

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

ParserError: Error tokenizing data. C error: Expected 52 fields in line 349255, saw 54.
打开文件一看,349255行52列数据中含有逗号
在这里插入图片描述
  因为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)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值