繁体   English   中英

带有 BOM 的 pandas read_csv() 因“文件意外结束”而失败

[英]pandas read_csv() with BOM fails with "unexpected end of file"

我收到一个 BOM 编码文件作为 http 请求参数,我想使用 read_csv 解析它,但使用engine='c'时出现以下错误:

{ParserError}Error tokenizing data. C error: EOF inside string starting at row 8

如果使用engine='python' ,这就是我得到的:

{ParserError}unexpected end of data

这是代码:

df = pd.read_csv(BytesIO(file_data), engine='c')

我尝试做 decode('utf-8-sig') 然后 encode('utf-8') 但它不起作用,我得到同样的错误。

如何解决这个问题?

附件如下:

,source,reference,Yandex Cloud Translate API v2  (stock)
0,"Find links about healthcare / medicines, hospitals in Budapest and a lot more in The links of expatriation.","Finden Sie Verbindungen gesundheit / krankenhaus, apotheke und arzneimittel in Budapest und vieles mehr unter Verzeichnis für Expatriation.","Finden Sie links über Gesundheitswesen / Medikamente, Krankenhäuser in Budapest und vieles mehr in den links von expatriation."
1,"Important for formal obligations for visitors in Schorndorf: Health insurance It's also necessary, that your visitor /guest issues a certificate of a health insurance to the Ausländeramt in Schorndorf.","Wichtig bei der Verpflichtungserklärung für Besucher in Schorndorf: Krankenversicherung Darüber hinaus ist es regelmäßig erforderlich, dass Ihr Gast den Abschluss einer Auslandskrankenversicherung der/dem Ausländeramt in Schorndorf nachweist.","Wichtig für formelle Verpflichtungen für Besucher in Schorndorf: Krankenversicherung es ist auch notwendig, dass Ihr Besucher / Gast beim Ausländeramt in Schorndorf eine krankenversicherungsbescheinigung ausstellt."
2,"If you think you are having any difficulty with your hearing, you should visit your doctor or healthcare professional as soon as possible.","Wenn Sie Schwierigkeiten mit dem Gehör haben, dann sollten Sie so schnell wie möglich einen Arzt oder Hörgeräteakustiker aufsuchen.","Wenn Sie denken, dass Sie Schwierigkeiten mit Ihrem Gehör haben, sollten Sie Ihren Arzt oder Arzt so schnell wie möglich besuchen."
3,This most important fair on the African continent for scientific and medical instruments took place in Johannesburg in South Africa in the Kyalami Exhibition Centre Midrand.,Diese wichtigste Messe auf dem afrikanischen Kontinent für wisschenschaftliche und medizinische Geräte fand in Johannesburg in Südafrika im Kyalami Exhibition Centre Midrand statt.,Diese wichtigste Messe auf dem afrikanischen Kontinent für wissenschaftliche und medizinische Instrumente fand in Johannesburg in Südafrika im Kyalami Exhibition Centre Midrand statt.
4,"Generally these negative effects do not occur; nevertheless, an improper dose of Semenax consumption could bring about some undesirable health concerns.",Normalerweise nicht passieren diese Nebenwirkungen; Dennoch kann eine falsche Dosis von Semenax Verbrauch zu einigen unerwünschten gesundheitlichen Bedenken führen.,Im Allgemeinen treten diese negativen Effekte nicht auf; dennoch könnte eine unsachgemäße Dosis von Semenax-Konsum zu einigen unerwünschten gesundheitlichen Bedenken führen.
5,"We do not accept any other definition that infers abortion to be within this term; and furthermore we understand that any care, information, policies or any other services pertaining to sexual and reproductive health similarly exclude abortion.","Wir akzeptieren keine andere Definition, die die Abtreibung in diesen Terminus einschließt; und weiter gehen wir davon aus, dass jede Betreuung, Information, Maßnahme oder andere Dienstleistung im Zusammenhang mit sexueller und reproduktiver Gesundheit ebenfalls die Abtreibung ausschließen.","Wir akzeptieren keine andere definition, die Abtreibung in diesem Begriff bezeichnet; und wir verstehen darüber hinaus, dass jegliche Sorge, information, Politik oder andere Dienstleistungen im Zusammenhang mit sexueller und reproduktiver Gesundheit Abtreibung ebenfalls ausschließen."
6,"So far, studies on the long-term health effects of the exposure of this population have not been undertaken.The total number of people affected by radioactive contamination may never be known.","Studien bezüglich der gesundheitlichen Auswirkungen der radioaktiven Verseuchung wurden bislang nicht durchgeführt.Wie viele Menschen von der Strahlung am Schluss betroffen sein werden, wird wohl nie bekannt werden.","Bisher wurden keine Studien über die langfristigen gesundheitlichen Auswirkungen der Exposition dieser Bevölkerung durchgeführt.Wie viele Menschen von der radioaktiven Kontamination betroffen sind, ist nicht bekannt."
7,"And people on the lower end of the economic spectrum tend to have a lower health status, hence lower blood quality with a higher risk for diseases like hepatitis.","Und Personen aus dem unteren Ende des ökonomischen Spektrums tendieren dazu, einen schlechteren Gesundheitszustand zu haben und damit eine geringere Blutqualität mit einem höheren Risiko für Krankheiten wie Hepatitis.","Und Menschen am unteren Ende des ökonomischen Spektrums neigen dazu, einen niedrigeren Gesundheitsstatus zu haben, daher niedrigere blutqualität mit einem höheren Risiko für Krankheiten wie hepatitis

该错误标识了一个实际问题。 此外,BOM 不是一种编码,它只是文件开头的几个字节,用于指定使用的 UTF 编码类型。

文本字段被引用,但最后一个没有结束引号。 即使数据是 memory 中的字符串,解析也会失败:

csv=''',source,reference,Yandex Cloud Translate API v2  (stock)
0,"Find links about healthcare / medicines, hospitals in Budapest and a lot more in The links of expatriation.","Finden Sie Verbindungen gesundheit / krankenhaus, apotheke und arzneimittel in Budapest und vieles mehr unter Verzeichnis für Expatriation.","Finden Sie links über Gesundheitswesen / Medikamente, Krankenhäuser in Budapest und vieles mehr in den links von expatriation."
1,"Important for formal obligations for visitors in Schorndorf: Health insurance It's also necessary, that your visitor /guest issues a certificate of a health insurance to the Ausländeramt in Schorndorf.","Wichtig bei der Verpflichtungserklärung für Besucher in Schorndorf: Krankenversicherung Darüber hinaus ist es regelmäßig erforderlich, dass Ihr Gast den Abschluss einer Auslandskrankenversicherung der/dem Ausländeramt in Schorndorf nachweist.","Wichtig für formelle Verpflichtungen für Besucher in Schorndorf: Krankenversicherung es ist auch notwendig, dass Ihr Besucher / Gast beim Ausländeramt in Schorndorf eine krankenversicherungsbescheinigung ausstellt."
2,"If you think you are having any difficulty with your hearing, you should visit your doctor or healthcare professional as soon as possible.","Wenn Sie Schwierigkeiten mit dem Gehör haben, dann sollten Sie so schnell wie möglich einen Arzt oder Hörgeräteakustiker aufsuchen.","Wenn Sie denken, dass Sie Schwierigkeiten mit Ihrem Gehör haben, sollten Sie Ihren Arzt oder Arzt so schnell wie möglich besuchen."
3,This most important fair on the African continent for scientific and medical instruments took place in Johannesburg in South Africa in the Kyalami Exhibition Centre Midrand.,Diese wichtigste Messe auf dem afrikanischen Kontinent für wisschenschaftliche und medizinische Geräte fand in Johannesburg in Südafrika im Kyalami Exhibition Centre Midrand statt.,Diese wichtigste Messe auf dem afrikanischen Kontinent für wissenschaftliche und medizinische Instrumente fand in Johannesburg in Südafrika im Kyalami Exhibition Centre Midrand statt.
4,"Generally these negative effects do not occur; nevertheless, an improper dose of Semenax consumption could bring about some undesirable health concerns.",Normalerweise nicht passieren diese Nebenwirkungen; Dennoch kann eine falsche Dosis von Semenax Verbrauch zu einigen unerwünschten gesundheitlichen Bedenken führen.,Im Allgemeinen treten diese negativen Effekte nicht auf; dennoch könnte eine unsachgemäße Dosis von Semenax-Konsum zu einigen unerwünschten gesundheitlichen Bedenken führen.
5,"We do not accept any other definition that infers abortion to be within this term; and furthermore we understand that any care, information, policies or any other services pertaining to sexual and reproductive health similarly exclude abortion.","Wir akzeptieren keine andere Definition, die die Abtreibung in diesen Terminus einschließt; und weiter gehen wir davon aus, dass jede Betreuung, Information, Maßnahme oder andere Dienstleistung im Zusammenhang mit sexueller und reproduktiver Gesundheit ebenfalls die Abtreibung ausschließen.","Wir akzeptieren keine andere definition, die Abtreibung in diesem Begriff bezeichnet; und wir verstehen darüber hinaus, dass jegliche Sorge, information, Politik oder andere Dienstleistungen im Zusammenhang mit sexueller und reproduktiver Gesundheit Abtreibung ebenfalls ausschließen."
6,"So far, studies on the long-term health effects of the exposure of this population have not been undertaken.The total number of people affected by radioactive contamination may never be known.","Studien bezüglich der gesundheitlichen Auswirkungen der radioaktiven Verseuchung wurden bislang nicht durchgeführt.Wie viele Menschen von der Strahlung am Schluss betroffen sein werden, wird wohl nie bekannt werden.","Bisher wurden keine Studien über die langfristigen gesundheitlichen Auswirkungen der Exposition dieser Bevölkerung durchgeführt.Wie viele Menschen von der radioaktiven Kontamination betroffen sind, ist nicht bekannt."
7,"And people on the lower end of the economic spectrum tend to have a lower health status, hence lower blood quality with a higher risk for diseases like hepatitis.","Und Personen aus dem unteren Ende des ökonomischen Spektrums tendieren dazu, einen schlechteren Gesundheitszustand zu haben und damit eine geringere Blutqualität mit einem höheren Risiko für Krankheiten wie Hepatitis.","Und Menschen am unteren Ende des ökonomischen Spektrums neigen dazu, einen niedrigeren Gesundheitsstatus zu haben, daher niedrigere blutqualität mit einem höheren Risiko für Krankheiten wie hepatitis'''

试图阅读这个抛出:

from io import StringIO
import pandas as pd

df=pd.read_csv(StringIO(csv))

>>> ...
>>> pandas.errors.ParserError: Error tokenizing data. C error: EOF inside string starting at row 8

第 8 行的最后一个字段有一个开始但没有结束引号:

"Und Menschen am unteren Ende des ökonomischen Spektrums neigen dazu, einen niedrigeren Gesundheitsstatus zu haben, daher niedrigere blutqualität mit einem höheren Risiko für Krankheiten wie hepatitis

添加缺少的引号后,可以解析文件:

>>> df=pd.read_csv(StringIO(csv+'"')
>>> df.columns
Index(['Unnamed: 0', 'source', 'reference',
       'Yandex Cloud Translate API v2  (stock)'],
      dtype='object')

另一个怪癖是第一列没有名称。 Pandas 将其读取为Unnamed: 0

未命名的列可以用作索引,方法是在index_col中指定它

>>> df=pd.read_csv(StringIO(csv+'"'),index_col=0)
>>> df.columns
Index(['source', 'reference', 'Yandex Cloud Translate API v2  (stock)'], dtype='object')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM