Python 3.x 如何在不提及列名的情况下,一次将多列数据类型格式转换为另一种数据类型格式?
我有超过20列的数据帧,具有Python 3.x 如何在不提及列名的情况下,一次将多列数据类型格式转换为另一种数据类型格式?,python-3.x,pandas,dataframe,datetime,strftime,Python 3.x,Pandas,Dataframe,Datetime,Strftime,我有超过20列的数据帧,具有datetime64[ns]格式。我想将它们全部转换为stringtime。有没有一个简单的方法可以做到这一点 Data.dtypes LT_TOTAL float64 INSERT_DT datetime64[ns] M0_ACT_0400 datetime64[ns] M0_ACT_0500 datetime64[ns] M2_ACT_1100 dat
datetime64[ns]
格式。我想将它们全部转换为stringtime
。有没有一个简单的方法可以做到这一点
Data.dtypes
LT_TOTAL float64
INSERT_DT datetime64[ns]
M0_ACT_0400 datetime64[ns]
M0_ACT_0500 datetime64[ns]
M2_ACT_1100 datetime64[ns]
M1_ACT_1240 datetime64[ns]
M3_ACT_1305 datetime64[ns]
M4_ACT_1400 datetime64[ns]
M5_ACT_1600 datetime64[ns]
M6_ACT_2990 datetime64[ns]
M7_ACT_3000 object
正常方式
data.loc[:,'M4_INI_1400'] =data.loc[:,'M4_INI_1400'].dt.strftime('%Y-%m-%d')
目前,如果有20列,我需要重复这个语句20次。我正在寻找另一种简单的方法
任何值得赞赏的帮助一个简单的方法是选择具有数据类型的列
datetime64
。将它们切掉,堆叠
并调用dt.strftime(“%Y-%m-%d”)
和取消堆叠
并将它们重新分配
cols = df.select_dtypes('datetime64').columns
df[cols] = df[cols].stack().dt.strftime('%Y-%m-%d').unstack()
注意:在大数据帧上,我不知道这个方法的速度。一个简单的方法是选择具有数据类型的列
datetime64
。将它们切掉,堆叠
并调用dt.strftime(“%Y-%m-%d”)
和取消堆叠
并将它们重新分配
cols = df.select_dtypes('datetime64').columns
df[cols] = df[cols].stack().dt.strftime('%Y-%m-%d').unstack()
注意:在大数据帧上,我不知道这种方法的速度。我认为如果使用默认的
axis=0
使用apply
,它会按列循环,所以它应该更快,就像axis=1
按行循环一样:
df1 = df.select_dtypes('datetime64')
df[df1.columns] = df1.apply(lambda x: x.dt.strftime('%Y-%m-%d'))
我认为如果使用
apply
和默认的axis=0
按列循环,那么它应该比按行循环的axis=1
更快:
df1 = df.select_dtypes('datetime64')
df[df1.columns] = df1.apply(lambda x: x.dt.strftime('%Y-%m-%d'))