Одо конвертирование данных между CSV и MySQL

При конвертации одного из .csv's к pd.DataFrame используя питона odo модуль я получаю TypeError

    TypeError: Cannot cast array from dtype('float64') to dtype('int64') 
               according to the rule 'safe'

Код, который работает для других csv's

# csv table file name
csvNm = 'table.csv'

# convert mysql table to csv
odo_csv = odo(tstConn.connect_string + '::' + tbl , csvNm)

# convert csv to pandas 
odo_df = odo(odo_csv , pd.DataFrame)

Вот что я пытался до сих пор безрезультатно:

import pandas as pd
from odo import odo, resource, discover, convert

odo_csv=odo(tstConn.connect_string + '::' + tbl , csvNm)
csv=resource(csvNm)
ds=discover(csv)

# Convert csv to pandas
odo_df = odo(odo_csv , pd.DataFrame, dshape=ds) 

и это:

odo_df = odo(odo_csv , pd.DataFrame, casting='unsafe')

Обновление 1 Похоже, я пренебрег самым очевидным намеком на эту ошибку

pandas\parser.pyx in pandas.parser.TextReader._convert_tokens (pandas\parser.c:11816)()

Ведущие к проблемам кодирования в Windows SO. Но ни это

odo_df = odo(odo_csv , pd.DataFrame, encoding=odo_csv.encoding)

или эта работа

odo_df = odo(odo_csv , pd.DataFrame, encoding='cp1252') 

Этот не элегантный способ (для моего варианта использования) взят из pandas-reading-csv-files (та же ссылка, что и выше)

# Python3
with open('/tmp/test.csv', 'r', encoding='cp1252') as f:
    df = pd.read_csv(f)
    print(df)

Не уверен, что попробовать дальше, любая помощь будет оценена.

1 ответ

Решение

Решение, которое работает:

import pandas as pd
from odo import odo, resource, discover, convert

# convert mysql to csv
odo_csv=odo(raw_dbConn.connect_string + '::' + tblName , csvNm, header=True)

# Get odo resource aka sqlalchemy.Table instance
resc=resource(raw_dbConn.connect_string + '::' + tblName )

# Discover the resc
ds=discover(resc)

# Convert csv to dataframe    
odo_df = odo(odo_csv , pd.DataFrame, dshape=ds ,encoding=odo_csv.encoding)
Другие вопросы по тегам