为什么Pandas中的数据类型与SQL中的数据类型不同

时间:2015-02-03 00:44:44

标签: python sqlite

我是SQLite和Python的新手,并且在这个主题中加入了圈子。

我导入一个SQLite表 SQL Table Column Data Type进入Python

使用代码

    conn = sqlite3.connect("C:\\SQLite\\aaa.sqlite")
    df=pd.read_sql(sql="select * from C",con=conn,coerce_float=True)

当我在Python中检查数据类型时。 有些是对象

 df.dtypes

WD             float64
Manpower       float64
2nd             object
CTR             object
2ndU           float64
T1              object
T2              object
T3              object
T4              object
T5              object

你知道为什么Python将一些列从float64转换为Object吗?

1 个答案:

答案 0 :(得分:2)

如果列包含至少一个不是float的值,Pandas将返回一个包含dtype object列的DataFrame。例如,字符串 - 甚至是空字符串 - 将强制整个列为对象dtype:

import sqlite3
import numpy as np
import pandas as pd

filename = '/tmp/test.sqlite'
with sqlite3.connect(filename) as conn:
    cursor = conn.cursor()
    cursor.execute('DROP TABLE IF EXISTS C')
    cursor.execute('CREATE TABLE C (CTR float)')
    sql = 'INSERT INTO C VALUES (?)'
    args = [(x, ) for x in np.random.random(5)] + [('',)]
    cursor.executemany(sql, args)
    df = pd.read_sql(sql="SELECT * FROM C",
                     con=conn, coerce_float=True)
    print(df)
    #           CTR
    # 0   0.1205763
    # 1   0.5859016
    # 2   0.9511995
    # 3  0.08459435
    # 4   0.8094845
    # 5            
    print(df.dtypes)

产量

CTR    object
dtype: object