提问人:EBAH 提问时间:11/24/2022 更新时间:11/24/2022 访问量:108
Pandas 字段分隔符和双引号
pandas field separator and double quotes
问:
我需要在 pandas 中加载一个不是 100% CSV“兼容”的 CSV 文件,下面是一个示例:
"Transaction date";"Accounting date";"Counterparty's data";"Title"
2021-08-22;2021-08-22;" "SPOLEM" ASS "ALDONA" AUGUSTOW ";" Title 450"
2019-09-02;2019-09-02;" 13XYZ05 "SKOWRONEK" NIEGOWA ";" Title 1300"
2010-07-18;2010-07-18;" APTEKA "SLOWINSKA" SPOLKALEBA ";" Title 123"
我使用以下命令将此 csv 文件 (csv_in) 读入 pandas 数据帧中:
df = pd.read_csv(csv_in, \
delimiter=';', \
engine='python', \
quoting=1)
我知道错误的csv格式是罪魁祸首,但是:
- 我怎样才能指示 pandas 指示进程在哪一行中断,而不是简单地通知我 pandas.errors.ParserError: ';' 预期在 '“' 之后......我想知道它在csv_in文件的哪一行中断了......拥有 6500 行的文件,您可以想象我在没有任何帮助的情况下找到这些畸形行是多么困难,除了“嘿,有一个错误!
- 是否可以指示熊猫使用组合 [;“]作为起始文本字段和 [“;]作为结束文本字段?这应该可以解决问题,并且显然可以以某种方式被 CSV 模块(import csv)理解,该模块读取文件而不会引发错误,而不会跳过行
谢谢! 埃文
答:
1赞
Naveed
11/24/2022
#1
指定 quotechar 并删除引擎属性(导致 C 为默认值)
pd.read_csv("csv2.txt", \
delimiter=';', \
quotechar='"')
Transaction date Accounting date Counterparty's data Title
0 2021-08-22 2021-08-22 SPOLEM" ASS "ALDONA" AUGUSTOW " Title 450
1 2019-09-02 2019-09-02 13XYZ05 SKOWRONEK" NIEGOWA " Title 1300
2 2010-07-18 2010-07-18 APTEKA SLOWINSKA" SPOLKALEBA " Title 123
评论
0赞
EBAH
11/24/2022
惊讶!12分钟回复... :)谢谢!另一方面,引擎似乎不允许我跳过页脚行。有什么想法吗?
1赞
Andrej Kesely
11/24/2022
#2
您可以尝试通过以下方式转义内部引号来清理数据:"
\
import re
import pandas as pd
from io import StringIO
with open("your_data.csv", "r") as f_in:
data = f_in.read()
data = re.sub(
r'"([^;]+)"',
lambda g: '"' + g.group(1).replace('"', r"\"").strip() + '"',
data,
)
df = pd.read_csv(StringIO(data), delimiter=";", quotechar='"', escapechar="\\")
print(df)
这打印:
Transaction date Accounting date Counterparty's data Title
0 2021-08-22 2021-08-22 "SPOLEM" ASS "ALDONA" AUGUSTOW Title 450
1 2019-09-02 2019-09-02 13XYZ05 "SKOWRONEK" NIEGOWA Title 1300
2 2010-07-18 2010-07-18 APTEKA "SLOWINSKA" SPOLKALEBA Title 123
上一个:如何在注册表上的值上添加引号?
评论