熊猫读取 CSV 已分隔

Pandas read CSV already delimited

提问人:Prmake 提问时间:11/15/2023 更新时间:11/15/2023 访问量:50

问:

我有一个CSV文件,其结构如下:

Data Download information etc.
Header1   Header2   Header3   Header4    ...
A         B         C         D          ...
E         F         G         H          ...
I         J         K         L          ...
...       ...       ...       ...        ...

除第一行外,所有标题和数据都已分隔为列。但是,我找不到读取 CSV 文件的方法。

[IN] df = pd.read_csv('path.csv', encoding='unicode_escape', skiprows=[1])

[OUT] pandas.errors.ParserError: Error tokenizing data. C error: Expected 6 fields in line 16, saw 7

总共有 50 列。第 16 行中的数据与其他行没有什么不同。

[IN] df = pd.read_csv('path.csv', skiprows=[1])

[OUT] UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfc in position 234375: invalid start byte

如果我使用 I 得到一个 df 作为输出,无论多么完全混乱,来自所有 50 列的数据都浓缩成 5 列,并在每列中添加一个“;”作为分隔符。skip_bad_lines

安妮的建议?

Python 熊猫 CSV

评论


答:

2赞 mozway 11/15/2023 #1
pd.read_csv('path.csv', encoding='unicode_escape', skiprows=[1])

跳过第二行。这会使第一行 () 成为标题,并扰乱列检测。Data Download information etc.

您应该使用:

# skip 1 row
pd.read_csv('path.csv', encoding='unicode_escape', skiprows=1)

艺术

# skip the first row (0-based indexing)
pd.read_csv('path.csv', encoding='unicode_escape', skiprows=[0])

有关详细信息,请参阅 read_csv 文档中的参数:skiprows

skiprows int,int 或 Callable 的列表,可选

文件开头要跳过的行号 (0-indexed) 或要跳过的行数 (int)。

如果可调用,则将根据行索引评估可调用函数,如果应跳过该行,则返回 True,如果应返回 False 否则。有效的可调用参数的一个示例是 。lambda x: x in [0, 2]

输出:

   Header1   Header2   Header3   Header4 
0  A         B         C         D       
1  E         F         G         H       
2  I         J         K         L       

评论

1赞 Prmake 11/15/2023
脸掌。但是,它不足以解决我的问题,仍然有一个 Parsewarning(错误标记数据)。如果我还添加 sep=None 和 engine='python' 以避免最终的 Parswarning,它会起作用。