如何在 Pandas 中一次将多列数据类型格式转换为另一种数据类型格式而不提及列名?
How to convert multiple columns datatype format to another datatype formats at a time in Pandas without mentioning column names?
我的数据框有超过 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次。我正在寻找另一种简单的方法。
感谢任何帮助
一个简单的方法是 select 具有 dtype datetime64
的列。将它们切出,stack
并调用 dt.strftime('%Y-%m-%d')
和 unstack
并将它们分配回去
cols = df.select_dtypes('datetime64').columns
df[cols] = df[cols].stack().dt.strftime('%Y-%m-%d').unstack()
注意:在大数据帧上,我不知道这种方法的速度。
我认为如果使用 apply
和默认 axis=0
它按列循环,所以它应该像 axis=1
一样更快按行循环:
df1 = df.select_dtypes('datetime64')
df[df1.columns] = df1.apply(lambda x: x.dt.strftime('%Y-%m-%d'))
我的数据框有超过 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次。我正在寻找另一种简单的方法。
感谢任何帮助
一个简单的方法是 select 具有 dtype datetime64
的列。将它们切出,stack
并调用 dt.strftime('%Y-%m-%d')
和 unstack
并将它们分配回去
cols = df.select_dtypes('datetime64').columns
df[cols] = df[cols].stack().dt.strftime('%Y-%m-%d').unstack()
注意:在大数据帧上,我不知道这种方法的速度。
我认为如果使用 apply
和默认 axis=0
它按列循环,所以它应该像 axis=1
一样更快按行循环:
df1 = df.select_dtypes('datetime64')
df[df1.columns] = df1.apply(lambda x: x.dt.strftime('%Y-%m-%d'))