简体   繁体   中英

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

I receive a BOM-encoded file as an http request parameter and I want to parse it using read_csv but I get the following error when using engine='c' :

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

If using engine='python' , this is what I get:

{ParserError}unexpected end of data

This is the code:

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

I tried doing decode('utf-8-sig') and then encode('utf-8') but it doesn't work and I get the same error.

How to fix this?

Attached file below:

,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

The error identifies an actual problem. Besides, BOM isn't an encoding, it's just a few bytes at the start of the file that specify the type of UTF encoding used.

Text fields are quoted but the last one has no closing quote. Parsing would fail even if the data was a string in 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'''

Trying to read this throws:

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

The last field in row 8 has a start but no end quote:

"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

Once the missing quote is added, the file can be parsed:

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

Another quirk is that the first column has no name. Pandas reads it as Unnamed: 0 .

The unnamed column can be used as an index instead, by specifying it in index_col

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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