Python Pandas DataFrame.itertuples()自动将对象数据类型转换为日期和时间数据类型

Python Pandas DataFrame.itertuples()自动将对象数据类型转换为日期和时间数据类型,python,pandas,dataframe,dask,Python,Pandas,Dataframe,Dask,我使用Dask和PyOrc在ORC文件中从数据库表写入数据。 为了指定正确的数据类型,我使用了元参数read\u sql\u table。 我的熊猫版本是1.2.1 下面是我的代码摘录: kwargs = dict( table=fetch_object_name, index_col=fetch_index_col, uri=uri, meta=dask_meta, colu

我使用Dask和PyOrc在ORC文件中从数据库表写入数据。 为了指定正确的数据类型,我使用了元参数
read\u sql\u table
。 我的熊猫版本是1.2.1

下面是我的代码摘录:

kwargs = dict(
            table=fetch_object_name,
            index_col=fetch_index_col,
            uri=uri,
            meta=dask_meta,
            columns=list(dask_meta.columns)
        )
dask_stream = dd.read_sql_table(**kwargs)
print(dask_stream.dtypes)

dask_stream.map_partitions(
                write_to_orc,
                data_path,
                meta=dask_meta
            ).compute()
它回来了

IDX01             Int64
IDX02             Int64
COL01            object
COL02            object
COL03             Int64
COL04             Int64
COL05             Int64
COL06             Int64
COL07           float64
COL08           float64
COL09           float64
COL10            object
COL11            object
COL12    datetime64[ns]
dtype: object
在write_to_orc函数中,我想对行进行迭代,以便将它们写入文件,但当我想打印行时,出现了一种奇怪的行为:

def write_to_orc(df, data_path):
    print(df.dtypes)
    for row in df.itertuples():
        print(row)
我得到:

IDX01             Int64
IDX02             Int64
COL01            object
COL02            object
COL03             Int64
COL04             Int64
COL05             Int64
COL06             Int64
COL07           float64
COL08           float64
COL09           float64
COL10            object
COL11            object
COL12    datetime64[ns]
dtype: object
Pandas(Index=1, IDX01=1400101, IDX02=447, COL01='Dim   ', COL02='1 Dimanche 2040 (Q1)', COL03=98, COL04=-19191, COL05=21082041, COL06=-6071621782820847456, COL07=3131.25, COL08=-1e+121, COL09=4.775582863893604e+18, COL10=datetime.date(1987, 6, 17), COL11=datetime.time(2, 11, 50), COL12=Timestamp('2012-04-27 13:02:23.860000'))
看起来数据类型不错,但是COL10和COL11列的值的类型不正确。不知何故,Pandas将它们转换为日期和时间(在任何时候我都会将日期和时间格式提供给Pandas),尽管相关的数据类型是object

这让我很困扰,因为时间对于兽人来说不是一种公认的类型,这就是为什么我想被当作字符串来处理

你能帮我理解这种奇怪的行为吗


提前感谢

在您的第一次输出中,
COL10
COL11
被报告为
object
dtype,这表明它们可能最初在
dask\u meta
中转换为
datetime
对象(至少对于某些行)。作为一种解决方法,您可以在
dask_meta
中将这些列显式设置为
String
(大写版本指的是新的数据类型)