我是stackoverflow的新手,所以如果我的帖子没有正确发布或者您需要更多信息,请告诉我 . 所以我有一个非常奇怪的问题 . 我有一个txt文件,其中许多行以“;”分隔 . 通常应该有42个字段/列,但由于某种原因导入时我的txt文件中的某些行被“;”分隔它显示了大量被跳过的行,因为python“预计42个字段,看到45” . 我使用pandas导入文件,因为我的大部分转换都是用它完成的:
text = pd.read_csv('file.txt',encoding='ISO-8859-1', keep_default_na=False,error_bad_lines=False, sep=';')
我发现的是,对于某些线路,我有3个额外的“;”在末尾 . 因为大多数数据是保密的,我无法在公司外共享,所以我生成了一个类似的3行txt文件,以向您展示我的问题所在 .
;;; 5123123; text1; text2 ;;;; 123124; text3; text4 ;;;; 5234234; text5; text6 ;;;; 412321; text7; text8 ;;;; 512312; text9; text10 ;;;; 15123213 ; text11; text12 ;;;; 123123; text13; text14 ;;; 4666190; text1; text2 ;;;; 312312; text3; text4 ;;;; 5123123; text5; text6 ;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;; 3123123; 512312312; text7 ;;;
所以那些与我的文件类似的三行,但有替换名称 . 第一行和第二行是正确的,但第三行在导入时会产生45个字段 . 那么有没有一种方法可以在导入之前浏览文件并查找以 ;;;5123123
开头的所有行,并检查最后是否有";"以及是否删除它们,然后导入它们 . 问题是只有一些行以 ;;;5123123
开头 . 这个错误有几百行,整个数据有点超过50k .
2 回答
我相信pd是pandas,所以你可以使用
usecols
参数来实现read_csv
方法Edited 您还可以添加
names
和headers
参数你试图拆分成一个列表,然后删除空白元素??
通过打印templist,它给出了所有元素的列表 . 您可以对其执行任何操作,例如根据您的要求使用for循环再次转换为字符串 . 输出就像 -