将熊猫数据框转换为字典时,日期从字符串更改为日期时间对象

use*_*827 3 python pandas

我有一个愚蠢的。数据框:

                avi       fi_id       dates
2017-07-17  0.318844    zab_a_002  2017-07-17
Run Code Online (Sandbox Code Playgroud)

当我将它转换成字典时,我得到了这个:

dict_avi = df.reset_index().to_dict('records')

[{'index': Timestamp('2017-07-17 00:00:00'), 'avi': 0.3188438263036763, 'fi_id': 'zab_a_002', 'dates': datetime.date(2017, 7, 17)}]
Run Code Online (Sandbox Code Playgroud)

为什么日期列变成了日期时间对象?如何将其保留为字符串?

这是dtypes:

avi        float64
fi_id     object
dates        object
dtype: object
Run Code Online (Sandbox Code Playgroud)

piR*_*red 8

您只想制作日期时间列字符串

首先,确保这些列实际上是 dtype datetime

df['index'] = pd.to_datetime(df['index'])
df['dates'] = pd.to_datetime(df['dates'])
Run Code Online (Sandbox Code Playgroud)

既然我们经历了这个麻烦,我们可以直接把它们变成字符串

df['index'] = pd.to_datetime(df['index']).astype(str)
df['dates'] = pd.to_datetime(df['dates']).astype(str)
Run Code Online (Sandbox Code Playgroud)

但这不能一概而论。

我要做的是select_dtypes只抓取datetime列并将它们转换为字符串。然后我将更新数据框并转储到新字典中。所有这些都不会弄乱数据框。

df.assign(
    **df.select_dtypes(['datetime']).astype(str).to_dict('list')
).to_dict('records')

[{'avi': 0.3188438263036763,
  'dates': '2017-07-17',
  'fi_id': 'zab_a_002',
  'index': '2017-07-17'}]
Run Code Online (Sandbox Code Playgroud)