我正在尝试在数据框中进行>>> fd = FlatDict(
... {
... 'person': {
... 'sexe': 'male',
... 'name': {
... 'first': 'jacques',
... 'last': 'dupond'
... }
... }
... }
... )
>>> fd
{'person.sexe': 'male', 'person.name.first': 'jacques', 'person.name.last': 'dupond'}
>>> fd['person'] = {'name': {'nickname': 'Bob'}}
>>> fd
{'person.sexe': 'male', 'person.name.first': 'jacques', 'person.name.last': 'dupond', 'person.name.nickname': 'Bob'}
>>> fd['person.name'] = {'civility': 'Dr'}
>>> fd
{'person.sexe': 'male', 'person.name.first': 'jacques', 'person.name.last': 'dupond', 'person.name.nickname': 'Bob', 'person.name.civility': 'Dr'}
并将日期从2017年或更晚到2017年以下的日期分开。
我需要将列“ Creation_Date”(日期格式为“%d /%m /%Y”)与值“ 01/01/2017”进行比较。
我不断收到相同的错误,即:np.where
我已使用函数can't compare datetime.date to unicode
将“ Creation_Date”列转换为日期格式。然后,我将值“ 01/01/2017”转换为日期格式,以将其与“ Creation_Date”列中的值进行比较。
这是实际的代码:
strftime
也尝试过:
my_df['temp_date'] = pd.to_datetime(my_df['Creation_Date'], dayfirst=True).dt.strftime('%Y-%m-%d')
t1 = my_df['temp_date'] >= dt.date(2017, 1, 1)
my_df['Final_Date'] = np.where(t1,'2017 or more','Below 2017')
在这些比较之间,我仍然无法获得正确的格式:无法将datetime.date与unicode比较。 我需要获得一个Final_Date列,以将Creation_Date与2017年或2017年及以后的日期区分开来。
可以帮我吗?
最诚挚的问候。
答案 0 :(得分:2)
从您的代码中,
my_df['temp_date'] = pd.to_datetime(my_df['Creation_Date'], dayfirst=True).dt.strftime('%Y-%m-%d')
然后my_df['temp_date']
是字符串,因此您无法真正将它们与都是dt.date(2017, 1, 1)
类型的dt.datetime.strptime('01/01/2017','%d/%m/%Y')
或datetime
进行比较。
另一方面,pandas
允许在pandas.Datetime
类型和日期字符串之间进行比较。因此,您可以摆脱dt.strftime
并进行比较:
my_df['temp_date']=pd.to_datetime(my_df['Creation_Date'], dayfirst=True)
my_df['temp_date'] >= '2017-01-01'