如何将字典中DataFrame的'%Y%m%d%H%M'格式转为datetime并替换原列
解决字典中DataFrame列的日期格式转换与替换问题
你原来的代码问题在于两层循环逐行处理的方式既低效,又没有把转换后的datetime值真正赋值回col1列,所以才看不到替换效果。其实pandas本身就支持批量处理这类格式转换,完全不用手动遍历每一行,我给你优化一下:
优化后的完整代码
import pandas as pd df1 = pd.DataFrame(data= {'col1':['201706202359' , '201706220510'], "col2" : ['0', '1']}) df2 = pd.DataFrame(data= {'col1':['201707202300' , '201706230600'],"col2" : ['0', '1']}) dfs = {'df1' : df1, 'df2' : df2} # 遍历字典中的每个DataFrame,批量转换并替换col1列 for name, df in dfs.items(): df['col1'] = pd.to_datetime(df['col1'], format='%Y%m%d%H%M')
为什么这样能解决问题?
pd.to_datetime()可以直接接收整个df['col1'](也就是pandas的Series对象)作为输入,指定format='%Y%m%d%H%M'来匹配你的日期字符串格式,它会自动批量把所有字符串转换成datetime类型,效率比逐行循环高得多。- 直接通过
df['col1'] = ...赋值,就能把转换后的datetime序列直接替换掉原来的col1列,一步到位。
原代码的问题补充
你之前的循环里,只是计算出了datetime值,但没有执行类似df['col1'].iloc[i] = datetime的赋值操作,而且即使加上这行,逐行处理在数据量较大时会非常影响性能,所以优先用pandas的批量操作才是最佳实践。
内容的提问来源于stack exchange,提问作者Amy21
相关产品推荐
相关产品推荐

