我在正确读取此源的数据时遇到了一个小问题。我试着写:
path = 'http://archive.ics.uci.edu/ml/machine-learning-databases/image/segmentation.data'
df = pd.read_table(path)
然后我发现了一些奇怪的事情。
然后我写道:
df = pd.read_table(path, sep=',', header=None)
得到一个错误:ParserError: Error tokenizing data. C error: Expected 1 fields in line 4, saw 19
你能帮我找到解决办法吗?
该文件基本上是一个csv
文件,因此您可以使用read_csv
。将它与skiprows=2
结合使用可以跳过文件的第一个非相关行。
import pandas as pd
path = 'http://archive.ics.uci.edu/ml/machine-learning-databases/image/segmentation.data'
df = pd.read_csv(path, skiprows=2, index_col=False)
输出df.head()
:
REGION-CENTROID-COL | VEDGE-EAN | VEDGE-SD | RAWGREEN-MEAN | EXRED-MEAN | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | BRICKFACE | 40125 | >0.062963 | 0.66666 7 | 0.311111 | 6.18518 | >td style="ext-align:right;">7.33333>td style="text-align:right;">7.666673.55556 | 3.444444 | -7.88889 | 7.77778 | 0.545635 | |
1 | BRICKFACE | 188 | >td style="ext-align:right:">133.2666670.5 | 0.0777777 | -8.33333 | 8.44444 | ||||||
2 | BRICKFACE | 0.107407 | 0.833333 text align:right;">-7.66667 | 7.55556 | 0.532628 | |||||||
3 | BRICKFACE | 0.166667 | 1、11111、0.474074、5.85185、7.77778、44444 align:right;">-7.55556 | 7.77778 | 0.573633 | |||||||
4 | BRICKFACE | 0.374074 | 0.88888 9 | 0.429629 | 6.03704 | >td style="ext-align:right;">7-7.77778 | 7.88889 | 0.562919 |
你能给出这样的编码吗:
path = 'http://archive.ics.uci.edu/ml/machine-learning-databases/image/segmentation.data'
df = pd.read_csv(path,encoding = 'utf8')
如果它不起作用,你能尝试其他编码吗?
问题似乎是数据文件包含一些Pandas无法解析的元信息。在pandas
读取文件之前,您需要将文件转换为CSV。
要做到这一点,首先将文件下载到本地机器的某个位置filepath
,并删除以;;;
开头的行和空行。然后运行pd.read_table(filepath, sep='t')
或pd.read_csv(filepath)
应该可以按预期工作。
请注意,header
参数不引用文件可能包含的任何通用标头信息。header
使pandas
知道CSV中的第一行是否包含列的名称(如果header
是True
),或者文件中的实际数据是否从第一行开始(如果header
是False
)。