python - 如何将日期格式字符串转换为 bool True 并将其他格式转换为 False?

标签 python pandas

import pandas
import numpy
df=pandas.DataFrame({'col1':['a','b','c','b'],'col2':['N','2018-03-12 15:35',numpy.NaN,'2017-06-12 15:35'],'col3':['c','b','b','b']})
print(df)

上面脚本的输出是:

  col1              col2 col3
0    a                 N    c
1    b  2018-03-12 15:35    b
2    c               NaN    b
3    b  2017-06-12 15:35    b

对于 col2 列,我想将所有 yyyy-mm-dd hh:mm 格式字符串转换为 bool True,其他为False,保持Na值不变。
预期结果如下:

  col1              col2 col3
0    a             False    c
1    b              True    b
2    c               NaN    b
3    b              True    b

怎么做? 提前致谢!

最佳答案

创建 2 个掩码 - 首先转换 to_datetime s 与 errors='coerce' 和测试 Series.notna并测试此列:

m1 = pd.to_datetime(df['col2'], errors='coerce').notna()
m2 = df['col2'].notna()

然后传给numpy.select - 但必须将 NaN 转换为 None:

df['col2'] = np.select([m1, m2], [True, False], None)
print(df)
0    a  False    c
1    b   True    b
2    c   None    b
3    b   True    b

或者使用DataFrame.loc :

df.loc[m2, 'col2'] = m1
print(df)
  col1   col2 col3
0    a  False    c
1    b   True    b
2    c    NaN    b
3    b   True    b

关于python - 如何将日期格式字符串转换为 bool True 并将其他格式转换为 False?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55396932/

相关文章:

python - 嵌套 np.where

python - Pandas 将行中上一个值和下一个值的平均值归咎于 Null

python - Beagleboard IP 分配代码中 struct.pack() 参数的含义

Python - 如何打印 Sqlite 表

python - 向现有 Pycharm 项目添加 Flask 支持

python - 数据帧 : Drop Down menu to select columns to Display (Bokeh) 的交互图

python - 过滤 pandas .isnull().any() 输出

python - 转换 pandas.DataFrame 中的元组列表

Python pandas 将可变数量的重复时间戳更改为唯一

java - python 中的 TCP 服务器通过 Spring 集成将文件发送到 TCP 客户端