Saltar al contenido

¿Pueden los pandas trazar un histograma de fechas?

Contamos con tu apoyo para compartir nuestras secciones sobre las ciencias de la computación.

Solución:

Dado este df:

        date
0 2001-08-10
1 2002-08-31
2 2003-08-29
3 2006-06-21
4 2002-03-27
5 2003-07-14
6 2004-06-15
7 2003-08-14
8 2003-07-29

y, si no es ya el caso:

df["date"] = df["date"].astype("datetime64")

Para mostrar el recuento de fechas por mes:

df.groupby(df["date"].dt.month).count().plot(kind="bar")

.dt le permite acceder a las propiedades de fecha y hora.

Que te dará:

agrupar por fecha mes

Puede reemplazar mes por año, día, etc.

Si desea distinguir el año y el mes, por ejemplo, simplemente haga lo siguiente:

df.groupby([df["date"].dt.year, df["date"].dt.month]).count().plot(kind="bar")

Lo que da:

grupo por fecha mes año

¿Era lo que querías? ¿Está claro?

Espero que esto ayude !

Creo que volver a muestrear podría ser lo que estás buscando. En tu caso haz:

df.set_index('date', inplace=True)
# for '1M' for 1 month; '1W' for 1 week; check documentation on offset alias
df.resample('1M', how='count')

Solo está haciendo el conteo y no la trama, por lo que luego debe hacer sus propias tramas.

Consulte esta publicación para obtener más detalles sobre la documentación de la documentación de remuestreo de pandas.

Me he encontrado con problemas similares a los tuyos. Espero que esto ayude.

ejemplo renderizado

ingrese la descripción de la imagen aquí

Código de ejemplo

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""Create random datetime object."""

# core modules
from datetime import datetime
import random

# 3rd party modules
import pandas as pd
import matplotlib.pyplot as plt


def visualize(df, column_name='start_date', color='#494949', title=''):
    """
    Visualize a dataframe with a date column.

    Parameters
    ----------
    df : Pandas dataframe
    column_name : str
        Column to visualize
    color : str
    title : str
    """
    plt.figure(figsize=(20, 10))
    ax = (df[column_name].groupby(df[column_name].dt.hour)
                         .count()).plot(kind="bar", color=color)
    ax.set_facecolor('#eeeeee')
    ax.set_xlabel("hour of the day")
    ax.set_ylabel("count")
    ax.set_title(title)
    plt.show()


def create_random_datetime(from_date, to_date, rand_type='uniform'):
    """
    Create random date within timeframe.

    Parameters
    ----------
    from_date : datetime object
    to_date : datetime object
    rand_type : 'uniform'

    Examples
    --------
    >>> random.seed(28041990)
    >>> create_random_datetime(datetime(1990, 4, 28), datetime(2000, 12, 31))
    datetime.datetime(1998, 12, 13, 23, 38, 0, 121628)
    >>> create_random_datetime(datetime(1990, 4, 28), datetime(2000, 12, 31))
    datetime.datetime(2000, 3, 19, 19, 24, 31, 193940)
    """
    delta = to_date - from_date
    if rand_type == 'uniform':
        rand = random.random()
    else:
        raise NotImplementedError('Unknown random mode '''
                                  .format(rand_type))
    return from_date + rand * delta


def create_df(n=1000):
    """Create a Pandas dataframe with datetime objects."""
    from_date = datetime(1990, 4, 28)
    to_date = datetime(2000, 12, 31)
    sales = [create_random_datetime(from_date, to_date) for _ in range(n)]
    df = pd.DataFrame('start_date': sales)
    return df


if __name__ == '__main__':
    import doctest
    doctest.testmod()
    df = create_df()
    visualize(df)

Reseñas y valoraciones de la guía

Al final de todo puedes encontrar las acotaciones de otros sys admins, tú además eres capaz dejar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *