2013-02-03 10 views
11

Mam DataFrame, która zawiera wiele danych śróddziennych, DataFrame ma kilka dni danych, daty nie są ciągłe.Pandy Pythona wydobywają unikalne daty z szeregu czasowego

2012-10-08 07:12:22   0.0 0   0 2315.6 0  0.0 0 
2012-10-08 09:14:00   2306.4 20 326586240 2306.4 472 2306.8 4 
2012-10-08 09:15:00   2306.8 34 249805440 2306.8 361 2308.0 26 
2012-10-08 09:15:01   2308.0 1 53309040 2307.4 77 2308.6 9 
2012-10-08 09:15:01.500000 2308.2 1 124630140 2307.0 180 2308.4 1 
2012-10-08 09:15:02   2307.0 5 85846260 2308.2 124 2308.0 9 
2012-10-08 09:15:02.500000 2307.0 3 128073540 2307.0 185 2307.6 11 
...... 
2012-10-10 07:19:30   0.0 0   0 2276.6 0  0.0 0 
2012-10-10 09:14:00   2283.2 80 98634240 2283.2 144 2283.4 1 
2012-10-10 09:15:00   2285.2 18 126814260 2285.2 185 2285.6 3 
2012-10-10 09:15:01   2285.8 6 98719560 2286.8 144 2287.0 25 
2012-10-10 09:15:01.500000 2287.0 36 144759420 2288.8 211 2289.0 4 
2012-10-10 09:15:02   2287.4 6 109829280 2287.4 160 2288.6 5 
...... 

Jak mogę wyodrębnić unikatową datę w formacie datetime z powyższej ramki danych DataFrame? Aby mieć wynik podobny [2012-10-08, 2012-10-10]

Odpowiedz

24

Jeśli masz Series jak:

In [116]: df["Date"] 
Out[116]: 
0   2012-10-08 07:12:22 
1   2012-10-08 09:14:00 
2   2012-10-08 09:15:00 
3   2012-10-08 09:15:01 
4 2012-10-08 09:15:01.500000 
5   2012-10-08 09:15:02 
6 2012-10-08 09:15:02.500000 
7   2012-10-10 07:19:30 
8   2012-10-10 09:14:00 
9   2012-10-10 09:15:00 
10   2012-10-10 09:15:01 
11 2012-10-10 09:15:01.500000 
12   2012-10-10 09:15:02 
Name: Date 

gdzie każdy obiekt jest Timestamp:

In [117]: df["Date"][0] 
Out[117]: <Timestamp: 2012-10-08 07:12:22> 

można uzyskać jedynie datę nazywając .date():

In [118]: df["Date"][0].date() 
Out[118]: datetime.date(2012, 10, 8) 

i Series posiada metodę .unique(). Więc można użyć map i lambda:

In [126]: df["Date"].map(lambda t: t.date()).unique() 
Out[126]: array([2012-10-08, 2012-10-10], dtype=object) 

lub użyć metody Timestamp.date:

In [127]: df["Date"].map(pd.Timestamp.date).unique() 
Out[127]: array([2012-10-08, 2012-10-10], dtype=object) 
+0

dzięki, jedno dodatkowe pytanie jednak, co będzie, jeśli zrobiłem 'kolumny dzień spełnienia wymogu będzie indeks,' df .index.map (pd.Timestamp.date) .unique() 'throws' 'numpy.ndarray' obiekt nie ma atrybutu "unique'' error – tesla1060

+1

@ tesla1060: można go po prostu wepchnąć z powrotem do' Series', z ' pd.Series (df.index) .map etc. Lub jeśli zamówienie nie ma znaczenia, nawet 'set (df.index.map (pd.Timestamp.date)) powinno działać. – DSM

1

Korzystanie regex:

(\d{4}-\d{2}-\d{2}) 

uruchomić go z re.findall funkcji, aby uzyskać wszystkie mecze:

result = re.findall(r"(\d{4}-\d{2}-\d{2})", subject)