提问人:Prmake 提问时间:11/15/2023 更新时间:11/15/2023 访问量:50
熊猫读取 CSV 已分隔
Pandas read CSV already delimited
问:
我有一个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
安妮的建议?
答:
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,它会起作用。
评论