Python Pandas中的数据类型与SQL中的数据类型不同的原因

Python Pandas中的数据类型与SQL中的数据类型不同的原因,python,sqlite,Python,Sqlite,我是SQLite和Python的新手,在这个话题上有很多圈子 我导入一个SQLite表 变成巨蟒 使用代码 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

我是SQLite和Python的新手,在这个话题上有很多圈子

我导入一个SQLite表 变成巨蟒

使用代码

    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吗?

如果列至少包含一个非float的值,Pandas将返回一个数据帧,其中的列为dtype
Object
。例如,字符串(即使是空字符串)将强制整个列为object 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