Как заставить pandas 1.0.3 записать csv в кодировке UTF-8 при работе на Windows? - PullRequest
0 голосов
/ 15 апреля 2020

Pandas 1.0.3

Python 3.7.6

код:

import pandas as pd

df = pd.DataFrame(data={'uom': ['M³']})
with open('encoded.csv', 'w') as csv_file:
    df.to_csv(csv_file, index=False, line_terminator='\n', encoding='utf-8')

with open('encoded.csv', 'r', encoding='utf-8') as csv_file:
    print(csv_file.read())

Когда я запускаю это на своей ма c, это работает нормально, выводя csv, показывающий кубические c метры в качестве единицы измерения:

uom
M³

Но при работе на windows не удается прочитать записанный файл:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position 7: invalid start byte

Вместо этого, похоже, что df.to_csv проигнорировал мою просьбу кодировать его как utf-8, а скорее записал его как iso-8859-1. Это работает в windows для чтения файла:

>>> csv_file = open('encoded.csv', 'r', encoding='iso-8859-1')
>>> print(csv_file.read())
uom
M³

Как заставить pandas 1.0.3 записать csv в кодировке UTF-8 при работе на Windows?

1 Ответ

1 голос
/ 15 апреля 2020

Спасибо @Quang Hoang, вы были правы. Открытие файла с кодировкой utf-8 в первую очередь сработало:

import pandas as pd

df = pd.DataFrame(data={'uom': ['M³']})
with open('encoded.csv', 'w', encoding='utf-8') as csv_file:
    df.to_csv(csv_file, index=False, line_terminator='\n')

with open('encoded.csv', 'r', encoding='utf-8') as csv_file:
    print(csv_file.read())

Похоже, pandas обращает внимание на параметр encoding, только если вы позволите ему создать файл для вас, но в В моем случае я сначала создавал файл.

Имеет смысл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...