检查date是否不等于NA或string,并且date<datetime(2000,01,01)在Python的pandas Dataframe中用NaT替换date

2024-04-29 06:51:48 发布

您现在位置:Python中文网/ 问答频道 /正文

def checkDF():
    list1=[{'BatchNumber':'b1','Reason':'r1.1','value':1,'date':datetime(1700,01,01)},
           {'BatchNumber':'b1','Reason':'r1.2','value':1,'date':'NA'},
           {'BatchNumber':'b2','Reason':'r2','value':2,'date':datetime(2001,03,04)}]
    df=pd.DataFrame(list1)

df.loc[df['date']!='NA' & df['date'] < datetime(2000,01,01),'date']="NaT"

if __name__=='__main__':
    checkDF()

当date为NA且小于2000时,我想替换date列的值,但我无法在pandas中将这两个条件一起比较


Tags: dataframedfdatetimedatevaluedefb2b1
2条回答

我认为需要先使用^{}和{}将非日期时间转换为NaT(它不是字符串,但缺少值):

list1=[{'BatchNumber':'b1','Reason':'r1.1','value':1,'date':pd.datetime(1700,1,1)},
           {'BatchNumber':'b1','Reason':'r1.2','value':1,'date':'NA'},
           {'BatchNumber':'b2','Reason':'r2','value':2,'date':pd.datetime(2001,3,4)}]
df  = pd.DataFrame(list1)

df['date'] = pd.to_datetime(df['date'].astype(str), errors='coerce')
df.loc[df['date'] < '2000-01-01', 'date']=np.nan
#if want check not NaNs
#df.loc[(df['date'].notnull()) & (df['date'] < pd.datetime(2000,1,1)),'date']=np.nan
print (df)
  BatchNumber Reason       date  value
0          b1   r1.1        NaT      1
1          b1   r1.2        NaT      1
2          b2     r2 2001-03-04      2
list1 = [{'BatchNumber':'b1','Reason':'r1.1','value':1,'date':datetime(1700,1,1)},
           {'BatchNumber':'b1','Reason':'r1.2','value':1,'date':'NA'},
           {'BatchNumber':'b2','Reason':'r2','value':2,'date':datetime(2001,3,4)}]

df = pd.DataFrame(list1)

# Create a function to represent your change
def f(x):
    if (isinstance(x, datetime) and x.year < 2000) or x == 'NA':
        return pd.NaT
    else:
        return x

# Apply this function to only the date column
df['date'] = df.date.map(f)

# Output
  BatchNumber Reason       date  value
0          b1   r1.1        NaT      1
1          b1   r1.2        NaT      1
2          b2     r2 2001-03-04      2

注意事项

  • 不能用01表示日期中的1(引发一个SyntaxError
  • ^数据中的{}是一个文本值,而不是numpy.nan(实际的NA),因此我们检查字符串'NA'

相关问题 更多 >