使用df.itertuples()需要花费很长时间

时间:2018-07-25 15:09:40

标签: python pandas datetime

我在数据框中有5列,分别代表每一行的年,月,日,小时和分钟。使用以下代码,我尝试添加另一列,该列使用前5列中的数据提供此格式:YYYY-MM-DD HH:MM:SS

for row in df.itertuples():    
    df.loc[row[0],'date'] = datetime.datetime(int(row[1]),int(row[2]),int(row[3]),int(row[4]),int(row[-1]))

我必须说我使用dmap转换编码的分钟数,以显示15的增量,如下所示:

dmap = {263:0,264:15,265:30,266:45}
df['ALIAS'] = df['MEAS_TYPE_ELEMENT_ALIAS'].map(dmap)

问题在于,此代码要处理400,000行几乎需要1个小时。我想知道是否有人可以帮助我找到一种更快的方法。

1 个答案:

答案 0 :(得分:1)

没有样本数据很难知道,但这似乎很好:

df = pd.DataFrame({'Year': ['2015', '2016', '2017'],
                   'Month': ['10', '11', '12'],
                   'Day': ['1', '2', '3'],
                   'Hour': ['10', '12', '14'],
                   'Minute': ['25', '35', '45'],
                   'Cat': list('ABC')})

df['Date'] = pd.to_datetime(df[['Year', 'Month', 'Day', 'Hour', 'Minute']])
#  Cat Day Hour Minute Month  Year                Date
#0   A   1   10     25    10  2015 2015-10-01 10:25:00
#1   B   2   12     35    11  2016 2016-11-02 12:35:00
#2   C   3   14     45    12  2017 2017-12-03 14:45:00

如果您的栏仅是['Year', 'Month', 'Day', 'Hour', 'Minute'],即使这样做也可以:

df['Date'] = pd.to_datetime(df)