很多问题已经被问到about this topic on SO .(还有很多其他的)。在众多的答案中,到目前为止没有一个对我真正有帮助。如果我错过了**有用的一个,请让我知道。
我只是想把一个带有pandas的CSV文件读到一个框架中。听起来像是一个简单的任务。
我的文件Test.csv
1,2,3,4,5
1,2,3,4,5,6
,,3,4,5
1,2,3,4,5,6,7
,2,,4
字符串
我的代码:
import pandas as pd
df = pd.read_csv('Test.csv',header=None)
型
我的错误:
pandas.errors.ParserError: Error tokenizing data. C error: Expected 5 fields in line 2, saw 6
型
我对这个问题的猜测是,Pandas会查看第一行,并期望后面的行中有相同数量的令牌。如果不是这样,它将停止并返回错误。
在众多的答案中,使用选项的建议是,例如:error_bad_lines=False
或header=None
或skiprows=3
以及更多无用的建议。
然而,我不想忽略任何一行或跳过,而且我事先也不知道这个表格有多少行和多少列。
因此,它基本上归结为如何找到最大列数在目录中。这是要走的路吗?我希望有一个简单的方法来简单地读取CSV文件,它没有在第一行的最大列数。谢谢你的任何提示。我使用Python 3.6.3,Pandas 0.24.1在Win7上。
6条答案
按热度按时间vecaoik11#
感谢@ALollz提供的“非常新鲜”的链接(幸运的巧合),感谢@Rich Andrews指出我的示例实际上不是“严格正确的”CSV数据。
所以,我目前的工作方式是改编自@ALollz的紧凑解决方案(https://stackoverflow.com/a/55129746/7295599)
字符串
df
包含空字符串''
用于开头和中间的缺失条目,None
用于结尾的缺失标记。型
如果您通过以下方式再次将此内容写入文件:
df.to_csv("Test.tab",sep="\t",header=False,index=False)
个None
将被转换为空字符串''
,一切正常。下一个层次是考虑包含分隔符的引号中的数据字符串,但这是另一个主题。
型
pieyvz9o2#
使用tolerant python csv模块读取csv,并在将其交给pandas之前修复加载的文件,这将在其他格式错误的csv数据上失败,而不管pandas使用的是什么csv引擎。
字符串
python外部的预处理文件,如果担心python内部的额外代码会创建太多python代码。
型
wi3ka0sx3#
我有一个不同的解决方案,让pandas负责创建表和删除None值,让我们负责编写一个适当的标记器。
Tokenizer
字符串
Tokenizer测试用例
型
输出
第一个月
将分词器投入使用
型
优点:
现在我们可以根据我们的需要teak tokenizer函数
kg7wmglp4#
在我的例子中,1我在Excel中打开 *.csv 2我将 *.csv保存为CSV(逗号分隔)3我通过以下方式在python中加载文件:
字符串
希望有帮助!
gr8qqesn5#
对我来说,解决方案是添加正确的分隔符
;
,如下所示:pandas.read_csv(path, sep=';')
个1mrurvl16#
对我来说,这是通过将usecols添加到pd.read_csv()命令来解决的:
usecols='My_Column_1','My_Column_2',.]