在Python中根据其他列的值(多个列中存在的日期条件)创建新列

时间:2018-11-19 10:49:43

标签: python pandas numpy date

在数据集中,有几列以日期为值。我需要根据日期值的某些条件创建新列。某些日期值将替换为“ \ 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')

在这方面的任何指导都会有所帮助。

1 个答案:

答案 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(不是时间),表示这些日期不存在。

以后,您可以对这些列进行操作。我不确定您的意图是什么,但是例如,这将在几天内返回Date1Date2的差额:

diff = (df['Date1'] - df['Date2']).days