python - 如何简化将具有某些值的列添加到我的数据框中?
问题描述
我有一个大数据框(超过 900000 行)并且想要根据第一列添加一些列(带有日期和时间的时间戳)。我的代码有效,但我想它太复杂而且太慢了。我是初学者,因此将不胜感激!谢谢!
df['seconds_midnight'] = 0
df['weekday'] = 0
df['month'] = 0
def date_to_new_columns(date_var, i):
sec_after_midnight = dt.timedelta(hours=date_var.hour, minutes=date_var.minute, seconds=date_var.second).total_seconds()
weekday = dt.date.isoweekday(date_var)
month1 = date_var.month
df.iloc[i, 24] = sec_after_midnight
df.iloc[i, 25] = weekday
df.iloc[i, 26] = month1
return
for i in range(0, 903308):
date_to_new_columns(df.timestamp.iloc[i], i)
解决方案
所以这很慢的原因是for循环单独处理每一行。让 pandas 如此出色的一件事是,您可以在一次操作中快速处理整个列/数据帧。
因此,同时为每个新列创建所有行:
def date_to_new_columns(df):
df['sec_after_midnight'] = (df.timestamp - df.timestamp.dt.normalize()).dt.seconds
df['weekday'] = df.timestamp.dt.day_name
df['month1'] = df.timestamp.dt.month
return
请注意,在 pandas 版本 0.23.0 之前,dt.day_name 方法称为 dt.weekday_name。
推荐阅读
- r - 打印不带引号的 sprintf
- docker - 命令 dockerd 中开关 --containerd 的目的是什么?
- xsitype - 如何从 xsi:type 行中提取数据?
- authentication - gitlab-runner 因 HTTP Basic 失败:访问被拒绝
- php - 通过解析 phpinfo 的输出克隆 php 配置
- c++ - CMake 跳过标准的预编译头文件
- pytorch - torch.sum 里面有一个条件
- javascript - 为单页应用中被点击的元素生成css选择器
- c++ - 如何在 C++ 中更改对象的动态数组的大小
- git - 使用 Github 中主分支的所有提交创建新分支