在数据集中,有几列以日期为值。我需要根据日期值的某些条件创建新列。某些日期值将替换为“ \ N”字符,因此似乎整个列都被视为字符串。
Date 1 Date 2
2012-12-03 2012-12-07
2004-12-31 \N
\N 2010-10-20
2014-11-22 \N
2014-12-16 2014-12-31
df = read_csv('filepath')
df['Level'] = np.where(df['Date 1'] - df['Date 2'] > '60', 'Level 1','Level 2')
这给我一个错误
TypeError:-:'str'和'str'
不受支持的操作数类型该条件还将包括另一种情况(语法可能不正确)
np.where(df['Date 1'] == pd.datetime('YYYY-MM-DD') & df['Date 1'] == "\N", 'Level 1','Level 2')
在这方面的任何指导都会有所帮助。
答案 0 :(得分:0)
该列确实被视为字符串。发生这种情况是因为,默认情况下,pandas不会将值转换为日期类型。
在df = read_csv(path)
之后,您可以执行以下操作:
df['Date 1'] = pd.to_datetime(df['Date 1'], errors='coerce')
df['Date 2'] = pd.to_datetime(df['Date 2'], errors='coerce')
errors='coerce'
会将'\N'
的值转换为NaT
(不是时间),表示这些日期不存在。
以后,您可以对这些列进行操作。我不确定您的意图是什么,但是例如,这将在几天内返回Date1
和Date2
的差额:
diff = (df['Date1'] - df['Date2']).days