Eli Turasky
Eli Turasky

Reputation: 1061

Remove duplicate datetime dates from list

I create a list of dates like so:

begin=dt.date(2010,1,1)
back=pd.date_range(end = begin, periods = 11).to_pydatetime().tolist()
forward=pd.date_range(start = begin, periods = 11).to_pydatetime().tolist()

I then append this list of dates to a new variable:

date_centered=[]
date_centered.append(back)
date_centered.append(forward)
date_centered

Output:

[[datetime.datetime(2009, 12, 22, 0, 0),
  datetime.datetime(2009, 12, 23, 0, 0),
  datetime.datetime(2009, 12, 24, 0, 0),
  datetime.datetime(2009, 12, 25, 0, 0),
  datetime.datetime(2009, 12, 26, 0, 0),
  datetime.datetime(2009, 12, 27, 0, 0),
  datetime.datetime(2009, 12, 28, 0, 0),
  datetime.datetime(2009, 12, 29, 0, 0),
  datetime.datetime(2009, 12, 30, 0, 0),
  datetime.datetime(2009, 12, 31, 0, 0),
  datetime.datetime(2010, 1, 1, 0, 0)],
 [datetime.datetime(2010, 1, 1, 0, 0),
  datetime.datetime(2010, 1, 2, 0, 0),
  datetime.datetime(2010, 1, 3, 0, 0),
  datetime.datetime(2010, 1, 4, 0, 0),
  datetime.datetime(2010, 1, 5, 0, 0),
  datetime.datetime(2010, 1, 6, 0, 0),
  datetime.datetime(2010, 1, 7, 0, 0),
  datetime.datetime(2010, 1, 8, 0, 0),
  datetime.datetime(2010, 1, 9, 0, 0),
  datetime.datetime(2010, 1, 10, 0, 0),
  datetime.datetime(2010, 1, 11, 0, 0)]]

I want to remove the duplicate date, in this case 2010,1,1. How would I do this?

Upvotes: 1

Views: 1812

Answers (2)

mgc
mgc

Reputation: 5443

You can use Python sets to get rid of the duplicate item :

set_back = set(back)
set_forward = set(forward)
# updates `set_back` by removing elements from `set_forward`
set_back.difference_update(set_forward)
# convert `set_back` and `set_forward` back to lists
# and add them to your `date_centered` result
date_centered = [list(set_back), list(set_forward)]

However, given your first lines of code, maybe you just want to get rid of the extra date by removing it from the back list :

begin = dt.date(2010,1,1)
back = pd.date_range(end = begin, periods = 11).to_pydatetime().tolist()
forward = pd.date_range(start = begin, periods = 11).to_pydatetime().tolist()

back.pop() # removes the last item

date_centered= [back, forward]

Upvotes: 2

David
David

Reputation: 1202

You can take the set of both lists (this will get rid of duplicates within every list) and subtract the common elements of both sets (A and B) from all possible values (A or B). This will return only the unique elements.

list((set(back) | set(forward)) - (set(back) & set(forward)))

Upvotes: 1

Related Questions