关于SO的这个话题已经问了很多问题。(以及许多其他)。到目前为止,在众多答案中,没有一个对我有真正的帮助。如果我错过 了有用的,请告诉我。
我只是想将带有熊猫的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
Run Code Online (Sandbox Code Playgroud)
我的代码:
import pandas as pd
df = pd.read_csv('Test.csv',header=None)
Run Code Online (Sandbox Code Playgroud)
我的错误:
pandas.errors.ParserError: Error tokenizing data. C error: Expected 5 fields in line 2, saw 6
Run Code Online (Sandbox Code Playgroud)
我对这个问题的猜测是,Pandas查找第一行,并期望接下来的行中具有相同数量的令牌。如果不是这种情况,它将以错误停止。
在众多答案中,使用选项的建议例如:
error_bad_lines=False或header=None或skiprows=3更多无用的建议。
但是,我不想忽略任何行或跳过。而且我不预先知道数据文件有多少列和行。
因此,基本上可以归结为如何找到数据文件中的最大列数。这是要走的路吗?我希望有一种简单的方法可以简单地读取第一行中没有最大列号的CSV文件。谢谢您的提示。我在Win7上使用Python 3.6.3,Pandas 0.24.1。
感谢@ALollz提供的“非常新鲜”链接(幸运的巧合),感谢@Rich Andrews指出我的示例实际上不是“严格正确”的CSV数据。
因此,暂时适用于我的方式是通过@ALollz的紧凑型解决方案(/sf/answers/3859082251/)改编的
### reading an "incorrect" CSV to dataframe having a variable number of columns/tokens
import pandas as pd
df = pd.read_csv('Test.csv', header=None, sep='\n')
df = df[0].str.split(',', expand=True)
# ... do some modifications with df
### end of code
Run Code Online (Sandbox Code Playgroud)
df''在开头和中间包含缺少条目的空字符串,在结尾处包含空字符串None。
0 1 2 3 4 5 6
0 1 2 3 4 5 None None
1 1 2 3 4 5 6 None
2 3 4 5 None None
3 1 2 3 4 5 6 7
4 2 4 None None None
Run Code Online (Sandbox Code Playgroud)
如果您通过以下方式再次将其写入文件:
df.to_csv("Test.tab",sep="\t",header=False,index=False)
1 2 3 4 5
1 2 3 4 5 6
3 4 5
1 2 3 4 5 6 7
2 4
Run Code Online (Sandbox Code Playgroud)
None将被转换为空字符串'',一切都很好。
下一个级别是考虑包含引号的数据字符串,其中包含分隔符,但这是另一个主题。
1,2,3,4,5
,,3,"Hello, World!",5,6
1,2,3,4,5,6,7
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5650 次 |
| 最近记录: |