【问题标题】:odo converting data between csv and mysqlodo 在 csv 和 mysql 之间转换数据
【发布时间】:2016-07-08 20:03:48
【问题描述】:

使用 python odo 模块将.csv's 之一转换为pd.DataFrame 时,我收到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)

不知道接下来要尝试什么,任何帮助将不胜感激。

【问题讨论】:

    标签: windows python-3.x csv pandas odo


    【解决方案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)
    

    【讨论】:

    • 有趣的是 with open('/tmp/test.csv', 'r', encoding='cp1252') as f: df = pd.read_csv(f) 对于形状为 (114,690,970, 5) 的 df 大约快一分钟
    猜你喜欢
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    相关资源
    最近更新 更多