Python 3.x 如何在不提及列名的情况下,一次将多列数据类型格式转换为另一种数据类型格式?

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

我有超过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          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'))