计算具有日期时间和今天的差异,并使用Pandas

时间:2016-07-22 15:56:14

标签: python pandas

我在csv中有以下格式的数据:

1,2015-02-01 

格式为

<internal_id>,<datetime>

我想忽略内部id,并使用datetime(如果没有从csv读取它以保存内存)。

我想要的是绘制文件中日期月份差异的直方图,今天,直方图的每个条形都是一个月。

伪代码的过程是:
1)计算文件中每行的月份差异和今天的 2)积累一个月的水桶差异 3)绘制直方图或类似的东西

目前我已经使用 python3 jupyter笔记本中创建了此代码:

from io import StringIO
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime

% matplotlib notebook

text = """1,2015-01-01
1,2015-02-01
1,2015-02-01
1,2015-03-01
1,2015-03-01
1,2015-03-01
1,2015-04-01
1,2015-04-01
1,2015-04-01
1,2015-04-01"""

plt.subplots()
def diff(row_date):
    today = datetime.now()
    return (today.year - row_date.year) * 12 + (today.month - row_date.month)

df = pd.read_csv(StringIO(text), usecols=[1], header=None, names=['date'], parse_dates=['date'])
serie = df.date
serie = serie.apply(diff)
serie.hist()

code in jupyter Plot result

是否有更优雅的方法使用内置函数分组并使用Pandas计算时间差异? (或更快) 谢谢!

1 个答案:

答案 0 :(得分:0)

from StringIO import StringIO
import pandas as pd

text = """1,2015-01-18
1,2015-02-10
1,2015-02-15
1,2015-02-20
1,2015-03-01
1,2015-03-02
1,2015-03-03"""

df = pd.read_csv(StringIO(text), header=None, parse_dates=[1], names=['count', 'Date'], index_col=1)

df.groupby(pd.TimeGrouper('M')).count().hist()

enter image description here