You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Pandas数据框指定日期列转换为含datetime的字典列表

问题:将Pandas Timestamp转换为Python datetime类型的字典列表

给定包含「Start date」和「End date」的CSV数据:

Start date          End date
10/1/2017 15:23:25  10/1/2017 15:26:26
10/1/2017 15:42:57  10/1/2017 17:49:59

需要转换为包含Python标准库datetime.datetime对象的字典列表:

[{'start': datetime.datetime(2017, 10, 1, 15, 23, 25),
  'end': datetime.datetime(2017, 10, 1, 15, 26, 26)},
 {'start': datetime.datetime(2017, 10, 1, 15, 42, 57),
  'end': datetime.datetime(2017, 10, 1, 17, 49, 59)}]

现有代码生成的是Pandas的Timestamp类型,不符合需求:

import pandas as pd

# Create a Pandas DataFrame
df = pd.DataFrame({'Start Date': ['10/1/2017 15:23:25', '10/1/2017 15:42:57'],
               'End Date': ['10/1/2017 15:26:26', '10/1/2017 17:49:59']})

# Create a list of dictionaries
list_of_dicts = []

# Loop over the DataFrame rows
for index, row in df.iterrows():

# Create a dictionary
dict_ = {'start': pd.to_datetime(row['Start Date']), 
'end': pd.to_datetime(row['End Date'])}

# Append the dictionary to the list
list_of_dicts.append(dict_)

# Print the list of dictionaries
print(list_of_dicts)

输出结果:

[{'start': Timestamp('2017-10-01 15:23:25'), 
'end': Timestamp('2017-10-01 15:26:26')}, 
{'start': Timestamp('2017-10-01 15:42:57'), 
'end': Timestamp('2017-10-01 17:49:59')}]

解决方案

Pandas的Timestamp对象自带.to_pydatetime()方法,可直接转换为Python标准库的datetime.datetime对象,以下是几种实现方式:

方法1:循环内直接转换

修改原有循环的字典生成逻辑,对每个Timestamp调用转换方法:

import pandas as pd
import datetime

df = pd.DataFrame({'Start Date': ['10/1/2017 15:23:25', '10/1/2017 15:42:57'],
                   'End Date': ['10/1/2017 15:26:26', '10/1/2017 17:49:59']})

list_of_dicts = []
for index, row in df.iterrows():
    dict_ = {
        'start': pd.to_datetime(row['Start Date']).to_pydatetime(),
        'end': pd.to_datetime(row['End Date']).to_pydatetime()
    }
    list_of_dicts.append(dict_)

print(list_of_dicts)
# 验证类型:print(type(list_of_dicts[0]['start']))  # 输出 <class 'datetime.datetime'>

方法2:批量转换列后生成字典列表

先批量转换日期列,再用to_dict('records')生成目标列表,效率优于逐行循环:

import pandas as pd

df = pd.DataFrame({'Start Date': ['10/1/2017 15:23:25', '10/1/2017 15:42:57'],
                   'End Date': ['10/1/2017 15:26:26', '10/1/2017 17:49:59']})

# 批量转换列并调整列名
df['start'] = pd.to_datetime(df['Start Date']).dt.to_pydatetime()
df['end'] = pd.to_datetime(df['End Date']).dt.to_pydatetime()

# 生成目标字典列表
list_of_dicts = df[['start', 'end']].to_dict('records')

print(list_of_dicts)

方法3:用apply函数逐行处理

通过apply函数对每行做转换,直接生成字典列表:

import pandas as pd

df = pd.DataFrame({'Start Date': ['10/1/2017 15:23:25', '10/1/2017 15:42:57'],
                   'End Date': ['10/1/2017 15:26:26', '10/1/2017 17:49:59']})

list_of_dicts = df.apply(
    lambda row: {
        'start': pd.to_datetime(row['Start Date']).to_pydatetime(),
        'end': pd.to_datetime(row['End Date']).to_pydatetime()
    },
    axis=1
).tolist()

print(list_of_dicts)

所有方法均可输出符合要求的、包含datetime.datetime对象的字典列表。


内容的提问来源于stack exchange,提问作者Jeff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 17:42:31