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
我是一名优秀的程序员,十分优秀!