如何在不使用for循环的情况下迭代一列的行以获取新列

时间:2019-10-25 12:09:41

标签: python pandas dataframe

我有一列称为Date的列,该列的对象类型具有日期和时间,格式为“ 2019/10 / 07,12:44:58”。 我尝试从“日期”列中切出日期部分,然后将其转换为正确的日期格式。我想在date列上应用此功能,以创建一个名为date1的新列,而无需使用for循环。

1 个答案:

答案 0 :(得分:0)

如我们所见,前两行具有不同的日期格式。因此,我们首先使用errors='coerce'将其余部分转换为日期时间。然后,我们转换前两行并使用fillna将两个日期汇总在一起:

date1 = pd.to_datetime(data['Date'], format='%Y/%m/%d,%H:%M:%S', errors='coerce')
date2 = pd.to_datetime(data.loc[date1.isna(), 'Date'], format='%d-%m-%Y,%H:%M:%S')

data['Date'] = date1.fillna(date2)

                 Date     Open     High      Low    Close   Qty  Value(Lk)  \
0 2019-10-07 12:45:17  1208.65  1208.85  1208.40  1208.85  1125      13.60   
1 2019-10-07 12:45:00  1208.70  1209.10  1208.40  1209.10  9344     112.95   
2 2019-10-07 12:43:58  1208.80  1209.40  1208.35  1208.65  7342      88.75   
3 2019-10-07 12:42:58  1208.70  1209.20  1208.40  1209.00  9355     113.08   
4 2019-10-07 12:41:57  1208.75  1209.00  1207.80  1208.35  5890      71.17   

   Trades BS  
0       4     
1      15     
2      13     
3      15     
4      13     

原始数据:

                  Date     Open     High      Low    Close   Qty  Value(Lk)  \
0  07-10-2019,12:45:17  1208.65  1208.85  1208.40  1208.85  1125      13.60   
1  07-10-2019,12:45:00  1208.70  1209.10  1208.40  1209.10  9344     112.95   
2  2019/10/07,12:43:58  1208.80  1209.40  1208.35  1208.65  7342      88.75   
3  2019/10/07,12:42:58  1208.70  1209.20  1208.40  1209.00  9355     113.08   
4  2019/10/07,12:41:57  1208.75  1209.00  1207.80  1208.35  5890      71.17   

   Trades BS  
0       4     
1      15     
2      13     
3      15     
4      13