Как открыть / конвертировать CSV в Python, чтобы строки не были Unicode? - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть CSV-файл различных столбцов чисел и строк.Когда я открываю его с помощью pandas.read_csv, он всегда дает мне юникод.В любом случае, я могу получить фрейм данных в не-Unicode или преобразовать их в строки (и сохранить плавающие ячейки как плавающие)?

Я пробовал буквально все возможные способы, включая некоторые ответы на аналогичный Stackoverflowвопросы.

Включая:

df = pd.read_csv('xxxx.csv', encoding = 'utf-8') Это не сработало вообще.

Я также попытался изменить dtype этого столбца с помощью astype(str) Это тоже не сработало.

Затем я попытался определить функцию преобразования для ее кодирования снова:

def convert(input):
    if isinstance(input, dict):
        return {convert(key): convert(value) for key, value in 
input.iteritems()}
    elif isinstance(input, list):
        return [convert(element) for element in input]
    elif isinstance(input, unicode):
        return input.encode('utf-8')
    else:
        return input

 df = convert(df)

Когда я звоню df.index.unique(), всегда показывается:

Index([u'row_a', u'row_b', u'row_c'], dtype='object', name=u'column_a')

Но я хочу, чтобы они были в строках.

Есть предложения?Большое спасибо!

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Я думаю, у вас есть проблема в том, что pandas выводит некоторые из ваших столбцов как «объектный» тип, и если он обнаружит хотя бы один объект Unicode, он будет выводить его как Unicode.Чтобы решить эту проблему, вы должны проверить, какие столбцы имеют юникод:

In [1] df.dtypes

Out[1]: 
column1         unicode
column2         unicode
column3         unicode

, затем получить типы:

types = df.apply(lambda x: pd.lib.infer_dtype(x.values))

и преобразовать их в строки:

for col in types[types=='unicode'].index:
    df[col] = df[col].astype(str)
0 голосов
/ 07 февраля 2019

Pandas автоматически назначает тип данных столбцам в вашем фрейме данных на основе содержимого столбца.Если вы хотите изменить это, вам нужно вывести тип данных для каждого из столбцов.Назовите эту строку кода для каждого столбца вашего фрейма данных.

df["column_name"] = df['column_name'].astype('object')

В Python тип данных String эквивалентен типу данных 'object' в pandas.

Для столбцов, содержащих числа с плавающей запятой, вызовите следующий код:

df["column_name"] = df['column_name'].astype('float64')

Также здесь есть ссылка для получения дополнительной информации о типах данных в пандах.

Вы также можете проверить тип данных для всех ваших столбцов, позвонив по номеру df.dtypes

enter image description here

0 голосов
/ 07 февраля 2019

Попробуйте:

df = pd.read_csv('xxxx.csv', dtype='str')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...