使用正则表达式有效地将熊猫中一列的值替换为另一列中的值?

PyRsquared

我有一个df以日期为字符串的熊猫数据框

Date1        Date2
2017-08-31   1970-01-01 17:35:00
2017-10-31   1970-01-01 15:00:00
2017-11-30   1970-01-01 16:30:00
2017-10-31   1970-01-01 16:00:00
2017-10-31   1970-01-01 16:12:00

我想做的是用Date2相应的日期替换中的每个日期部分Date1但保持原样,因此输出是:

Date1        Date2
2017-08-31   2017-08-31 17:35:00
2017-10-31   2017-10-31 15:00:00
2017-11-30   2017-11-30 16:30:00
2017-10-31   2017-10-31 16:00:00
2017-10-31   2017-10-31 16:12:00

我已经使用熊猫replace和正则表达式实现了这一点

import re
date_reg = re.compile(r"([0-9]{4}\-[0-9]{2}\-[0-9]{2})")
df['Market Close Time'].replace(to_replace=date_reg, value=df['Date1'], inplace=True)

但是对于只有15万行的数据帧,此方法非常慢(> 10分钟)。

这篇文章中的解决方案实现了numpy np.where,该方法要快得多-np.where在本示例中如何使用numpy ,或者还有另一种更有效的方法来执行此操作?

耶斯列尔

一种想法是:

df['Date3'] =  ['{} {}'.format(a, b.split()[1]) for a, b in zip(df['Date1'], df['Date2'])]

要么:

df['Date3'] = df['Date1'] + ' ' + df['Date2'].str.split().str[1]
print (df)
        Date1                Date2                Date3
0  2017-08-31  1970-01-01 17:35:00  2017-08-31 17:35:00
1  2017-10-31  1970-01-01 15:00:00  2017-10-31 15:00:00
2  2017-11-30  1970-01-01 16:30:00  2017-11-30 16:30:00
3  2017-10-31  1970-01-01 16:00:00  2017-10-31 16:00:00
4  2017-10-31  1970-01-01 16:12:00  2017-10-31 16:12:00

要么:

df['Date3'] = pd.to_datetime(df['Date1']) + pd.to_timedelta(df['Date2'].str.split().str[1])
print (df)
        Date1                Date2               Date3
0  2017-08-31  1970-01-01 17:35:00 2017-08-31 17:35:00
1  2017-10-31  1970-01-01 15:00:00 2017-10-31 15:00:00
2  2017-11-30  1970-01-01 16:30:00 2017-11-30 16:30:00
3  2017-10-31  1970-01-01 16:00:00 2017-10-31 16:00:00
4  2017-10-31  1970-01-01 16:12:00 2017-10-31 16:12:00

时间

In [302]: %timeit df['Date3'] =  ['{} {}'.format(a, b.split()[1]) for a, b in zip(df['Date1'], df['Date2'])]
30.2 ms ± 137 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [303]: %timeit df['Date3'] = df['Date1'] + ' ' + df['Date2'].str.split().str[1]
66.4 ms ± 3.18 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有效地将一列中的值替换为另一列Pandas DataFrame

用另一列的正则表达式替换一列中的NaN值

熊猫使用正则表达式匹配基于另一列的值设置一列的布尔值

根据使用正则表达式获得的匹配结果,替换另一列上的值(Python Pandas)

根据另一列中的值将正则表达式应用于数据框列

如何基于对Pyspark中另一列的表达式求值,有条件地替换一列中的值?

使用熊猫将值从一列替换为另一列?

使用 dplyr 有条件地将列中的值替换为另一列中的值

根据其他列的正则表达式捕获组中的值,将列有效地添加到数据框

用不同的方法有效地填充每一列中的缺失值?

使用dplyr有条件地将一列中的值替换为另一列中的值

在熊猫中使用另一列替换一列中值的有效方法

使用条件将一列中的整个值替换为另一列

在依赖于另一列熊猫的一列上有效地应用操作

使用perl替换一列文本中的字符串的正则表达式

根据使用另一列的正则表达式提取的内容,有条件地在spark数据框中填充新列

根据条件将一列中的值替换为另一列中的值

当所有值都是日期时,将一列中的 NA 替换为另一列中的值

将一列中的 NA 替换为 dplyr 中另一列的值

使用熊猫将零替换为另一列的值

将一列条件中的值替换为另一列:R

如何通过Pyspark中同一数据帧中另一列的正则表达式值过滤数据帧中的列

如何有效地查找PySpark数据帧中每一列的Null和Nan值计数?

使用另一列从左到右开始的熊猫正则表达式匹配字符串

熊猫通过基于另一列的bins参数有效地削减了列

熊猫根据另一列中的值替换值

pyspark:删除作为另一列值的子字符串,并从给定列的值中包含正则表达式字符

用另一列Python中的自己的正则表达式匹配列

使用R有效地计算一列中单词列表的出现