我在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()
是否有更优雅的方法使用内置函数分组并使用Pandas计算时间差异? (或更快) 谢谢!
答案 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()