python - If else datetime python函数
问题描述
在我的数据中,我有一个名为过期日期的列,其中一些事件有一个过期日期,而有些则没有,所以当我加载日期时,该列看起来像以下作为对象加载的:
expiration_date
2017-06-14
2018-01-15
9999-12-31
然后我将其转换为 datetime 并强制执行错误,从而将 9999-12-31 日期保留为 NaT
data.expiration_date = pd.to_datetime(data.expiration_date, errors = 'coerce')
然后,我想创建一个函数,该函数创建一个新列二进制列,如果到期日期为 NaT,则为 1,否则为 0。我尝试了以下操作:
def status(data):
if data[data.expiration_date.isnull()]:
return 1
else:
return 0
data['event'] = data.apply(status, axis = 1)
但我收到以下错误消息,我认为它试图在日期时间格式的列上使用 isnull。我一直无法找到解决日期时间中的空值的好方法。
"'datetime.date' object has no attribute 'isnull'", 'occurred at index 0'
任何想法,我是 python 新手,任何帮助都会很棒!谢谢!
解决方案
用 lambda 检查数据类型试试这个
示例数据框
mydict1 = {'expiration_date' : ['2017-06-14','2018-01-15','9999-12-31']}
df=pd.DataFrame(mydict1)
df.expiration_date=pd.to_datetime(df.expiration_date, errors = 'coerce')
print(df)
输出
expiration_date
0 2017-06-14
1 2018-01-15
2 NaT
单独保留日期部分
df.expiration_date.values.astype('M8[D]')
print(df)
在系列上应用功能
def status(data):
if (type(data)!=datetime.date):
return 1
return 0
df['event']=df.expiration_date.dt.date.apply(status)
print(df)
输出
expiration_date event
0 2017-06-14 0
1 2018-01-15 0
2 NaT 1
没有 lambda 的更短的解决方案
df['event']=df['expiration_date'].isnull().astype('int')
输出
expiration_date event
0 2017-06-14 0
1 2018-01-15 0
2 NaT 1
只是在玩与上述类似的解决方案
df['event']=0
df.loc[df.expiration_date.isnull(),'event']=1
推荐阅读
- php - 实时获取在棘轮php中断开连接的客户端的客户端资源ID
- java - IntelliJ:如何将文本文件和图像等资源复制到构建路径?
- pandas - 如何一次性重命名所有列名
- javascript - 获取jquery对话框的ui元素值
- javascript - 为什么我的购物车不能正确更新总数
- ubuntu - 关于布尔类型转换的 Ansible 警告
- python - Python SUBlime Text 3 诅咒
- javascript - 如何下载json文件并将其保存为服务器上的js文件?
- bluetooth-lowenergy - 如何以及使用哪个 Beacon SDK?
- php - 每 X 步增加统一运费,最少。基本费用-Woocommerce