我正在尝试对数据进行一些分析。我有csv文件,我将其转换为pandas数据帧。数据看起来像这样。它有几列,但我试图绘制x轴作为日期列。 。
pandas数据框看起来像这样
print (df.head(10)
cus-id date value_limit
0 10173 2011-06-12 455
1 95062 2011-09-11 455
2 171081 2011-07-05 212
3 122867 2011-08-18 123
4 107186 2011-11-23 334
5 171085 2011-09-02 376
6 169767 2011-07-03 34
7 80170 2011-03-23 34
8 154178 2011-10-02 34
9 3494 2011-01-01 34
我正在尝试绘制日期数据,因为同一日期有多个值。为此我试图将x-asis刻度作为日期。由于日期栏中的最短日期为2011-01-01,最长日期为2012-04-20。
我试过这样的事情
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import datetime
import matplotlib.dates as mdates
df = pd.read_csv('rio_data.csv', delimiter=',')
print (df.head(10))
d = []
for dat in df.date:
# print (dat)
d.append(datetime.strptime(df['date'], '%Y-%m-%d'))
days = dates.DayLocator()
datemin = datetime(2011, 1, 1)
datemax = datetime(2012, 4, 20)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.xaxis.set_major_locator(days)
ax.set_xlim(datemin, datemax)
ax.set_ylabel('Count values')
但是我收到了这个错误。
AttributeError: 'DataFrame' object has no attribute 'date'
有人可以帮助我将x轴绘制为日期列。我会很感激。
答案 0 :(得分:4)
如果将索引设置为datetime系列,matplotlib将为您处理x轴。以下是如何处理此可视化的最小示例。
import pandas as pd
import matplotlib.pyplot as plt
date_time = ["2011-09-01", "2011-08-01", "2011-07-01", "2011-06-01", "2011-05-01"]
date_time = pd.to_datetime(date_time)
temp = [2, 4, 6, 4, 6]
DF = pd.DataFrame()
DF['temp'] = temp
DF = DF.set_index(date_time)
fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.3)
plt.xticks(rotation=90)
plt.plot(DF)
重要的一点是,将DataFrame索引设置为datetime系列允许matplotlib在时间序列数据上处理x轴,而无需太多帮助。
Follow this link for detailed explanation on spacing axis ticks (specifically dates)
答案 1 :(得分:3)
您错过了' 第12行。这会导致语法错误。
这应该可以纠正错误。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import datetime
import matplotlib.dates as mdates
df = pd.read_csv('rio_data.csv', delimiter=',')
print (df.head(10))
d = []
for dat in df.date:
# print (dat)
d.append(datetime.strptime(df['date'], '%Y-%m-%d'))
days = dates.DayLocator()
datemin = datetime(2011, 1, 1)
datemax = datetime(2012, 4, 20)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.xaxis.set_major_locator(days)
ax.set_xlim(datemin, datemax)
ax.set_ylabel('Count values')