我发现了一种方法来识别数据框中的日期时间列,然后对它们全部应用strftime格式。然而,我正试图扩大我的技能与Pandas和远离使用申请,所以答案更有效将是伟大的!下面是一些示例代码。。
import pandas as pd
# Create df
test_tz_df = pd.DataFrame(
{
'With tz' : [(pd.to_datetime('today') - pd.DateOffset(days=1)).tz_localize(tz='America/Los_Angeles').tz_localize(None)]*2,
'Without tz' : [(pd.to_datetime('today') - pd.DateOffset(days=1))]*2,
'strings' : ['string a','string b']
}
)
# Find the dt columns to edit
datetime_cols = test_tz_df.select_dtypes(include=["datetime64[ns]"]).columns.to_list()
# apply() strftime() formatting
test_tz_df[datetime_cols] = test_tz_df[datetime_cols].apply(lambda x : x.dt.strftime('%Y-%m-%d %H:%M:%S'))
2条答案
按热度按时间a64a0gku1#
我发现
.at[]
比.apply()
、.iteritems()
和.loc[]
更快下面是一个带有timeit结果的示例实现:
结果:使用:0.989
与.at:0.357
这是一个相当显著的时间优势,尽管两个循环看起来很荒谬。
(You我会注意到我跳过了问题中标识日期时间列的部分;我看不出有什么办法可以改善这一点)。
myss37ts2#
apply()
没有利用即时加载,这意味着随着数据的增长,执行时间也会增长你是对的,但不是在你现在的情况下:
输出:
您只在两列上创建了一个“循环”,因此在这里寻找
apply
的替代方案是不相关的。