Wziąłem serię i wymusiłem na niej kolumnę z datetime64[ns]
datą i godziną dtype = (chociaż potrzebuję tylko rozdzielczości dziennej ... nie wiem, jak to zmienić).
import pandas as pd
df = pd.read_csv('somefile.csv')
column = df['date']
column = pd.to_datetime(column, coerce=True)
ale kreślenie nie działa:
ipdb> column.plot(kind='hist')
*** TypeError: ufunc add cannot use operands with types dtype('<M8[ns]') and dtype('float64')
Chciałbym wykreślić histogram, który po prostu pokazuje liczbę dat według tygodnia, miesiąca lub roku .
Na pewno jest na to sposób pandas
?
python
pandas
matplotlib
time-series
lollercoaster
źródło
źródło
Odpowiedzi:
Biorąc pod uwagę ten df:
a jeśli jeszcze nie jest:
Aby wyświetlić liczbę dat według miesiąca:
.dt
umożliwia dostęp do właściwości daty i godziny.Co da ci:
Możesz zamienić miesiąc na rok, dzień itp.
Jeśli chcesz na przykład rozróżnić rok i miesiąc, po prostu wykonaj:
Co daje:
Czy tego chciałeś? Czy to jasne?
Mam nadzieję że to pomoże !
źródło
date
lubDate
tutaj są nazwy kolumn, więc jeśli twoja kolumna z datami nazywa się foo, będzie to:df.foo.dt.month
groupby
na kombinację dwóch atrybutów danych kolumn (np .: rok i data)?Myślę, że resample może być tym, czego szukasz. W twoim przypadku zrób:
To tylko liczenie, a nie fabuła, więc musisz wtedy tworzyć własne wykresy.
Zobacz ten post, aby uzyskać więcej informacji na temat dokumentacji ponownego próbkowania pandas resample
Napotkałem podobne problemy jak ty. Mam nadzieję że to pomoże.
źródło
how
jest przestarzałe. Nowa składnia todf.resample('1M').count()
Renderowany przykład
Przykładowy kod
źródło
Udało mi się to obejść, (1) kreśląc za pomocą matplotlib zamiast bezpośrednio używać ramki danych i (2) używając
values
atrybutu. Zobacz przykład:To nie działa, jeśli nie używam
values
, ale nie wiem, dlaczego działa.źródło
Oto rozwiązanie, gdy chcesz mieć histogram, jakiego oczekujesz. Nie używa to grupowania, ale konwertuje wartości daty i godziny na liczby całkowite i zmienia etykiety na wykresie. Można by wprowadzić pewne ulepszenia, aby przenieść etykiety znaczników nawet w lokalizacje. Z podejściem możliwy jest również wykres oceny gęstości jądra (i każdy inny wykres).
źródło
Myślę, że aby rozwiązać ten problem, możesz użyć tego kodu, który konwertuje typ daty na typy int:
aby uzyskać tylko datę, możesz dodać ten kod:
źródło
Ja też miałem z tym problem. Wyobrażam sobie, że skoro pracujesz z datami, chcesz zachować porządek chronologiczny (tak jak ja).
W takim przypadku obejście to
Proszę, jeśli ktoś zna lepszy sposób, proszę o głos.
EDYCJA: dla Jean powyżej, oto próbka danych [Próbowałem losowo z pełnego zestawu danych, stąd trywialne dane histogramu.]
Wynik:
źródło
Wszystkie te odpowiedzi wydają się zbyt skomplikowane, przynajmniej w przypadku „nowoczesnych” pand są to dwie linie.
źródło
DataFrame
, ale nie wtedy, gdy wszystko, co masz, toSeries
. Czy rozważyłbyś dodanie notatki w tej sprawie?