首页 > 解决方案 > 如何简化将具有某些值的列添加到我的数据框中?

问题描述

我有一个大数据框(超过 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)

标签: pythonpandas

解决方案


所以这很慢的原因是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。


推荐阅读