Python 如何简化向数据框中添加具有特定值的列?
我有一个大数据框(超过900000行),并希望根据第一列添加一些列(带有日期和时间的时间戳)。我的代码可以工作,但我想它太复杂太慢了。我是一个初学者,所以帮助将不胜感激!谢谢Python 如何简化向数据框中添加具有特定值的列?,python,pandas,Python,Pandas,我有一个大数据框(超过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, min
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)
如果该列是datetime64/时间戳列,则可以使用:
如果该列是datetime64/时间戳列,则可以使用:
因此,这是缓慢的原因是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。因此速度较慢的原因是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
请注意,在0.23.0版之前,dt.day_name方法称为dt.weekday_name