首页 > 解决方案 > Python如何避免在numpy where子句之后从日期到纳秒的数据类型变化

问题描述

我有一个带日期的数据集,我想做的是替换早于 2000 年到 2000-12-31 12:00:00 的任何日期值,而其他日期保持不变。但是,我的代码结果在 false 语句中将日期值转换为纳秒

我的代码:

   data['date'] = np.where(data['date']<=datetime(2000,12,31,12,0,0) , pd.to_datetime('2000-12-31 00:00:00') , data['date'])

我的data桌子:

   Date                        value
   1990-01-01 12:00:00           1
   2020-12-31 12:00:00           2 

预期表

   Date                        value
   2000-12-31 12:00:00           1
   2020-12-31 12-00:00           2

现在的实际表格结果

   Date                        Value  
   2000-12-31 12:00:00           1
   1609416000000                 2 

标签: pythonpython-3.xdataframeetl

解决方案


您可以简单地使用.loc[]pandas 中的函数来仅修改您感兴趣的行,如下所示:

import pandas as pd
import numpy as np
from datetime import datetime

# Creating your sample dataframe
data = pd.DataFrame({'date': [pd.to_datetime('1990-01-01 12:00:00'), pd.to_datetime('2020-12-31 12:00:00')], 'Value': [1,2]})

# filtering your rows to only take the ones before 2000-12-31 12:00:00 and replacing them with 2000-12-31 00:00:00
data.loc[data['date']<=datetime(2000,12,31,12,0,0), 'date'] = pd.to_datetime('2000-12-31 00:00:00')

data.head()

回报:

 date                   Value
 2000-12-31 00:00:00    1
 2020-12-31 12:00:00    2

推荐阅读