如何将循环结果放入列表中?
How to put results of loop into a list?
我有一个数据集:
a b c
11/01/1999 8 367235
11/01/1999 5 419895
11/01/1999 1 992194
23/03/1999 4 419895
30/04/1999 1 992194
02/06/1999 9 419895
08/08/1999 2 367235
12/08/1999 3 419895
17/08/1999 10 992194
22/10/1999 3 419895
04/12/1999 4 992194
04/03/2000 2 367235
29/09/2000 9 367235
30/09/2000 9 367235
我正在尝试进行可视化,以显示随时间变化的值集("b" 列)("a" 列):
*请注意,这只是为了描绘我想要的一般图片 - 这不是我的数据集。
我将数据集更改为数据透视表 table,它在第一列中列出了列 "c" 值,在第一行列出了 "a" 值,在第一行列出了 "b" 值在数据框内。令人高兴的是,我已经能够从数据透视表 table 中提取值的行,并将其用作 matplotlib 图(代表图表上的 y 值)的输入。不幸的是,我无法以 acceptable 格式提取枢轴 table 的 header,这是一个问题,因为 header 代表图表上的 x 值。
这是有效的代码部分:
from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
from datetime import datetime
df = (pd.read_csv('orcs.csv'))
df_wanted = pd.pivot_table(
df,
index='c',
columns='a',
values='b')
lala = df_wanted.as_matrix()
x=np.array(lala[1,:])
y = (df_wanted.columns.astype(str).tolist())
这是代码中不起作用的部分。
我尝试了几种替代方法(包括错误消息):
1.
plt.plot(x,y)# error: could not convert string to float: '02/06/1999'
2.
for i in range(len(y)):
c= (y[i])
print(c) #no error message, but gives me an output I don't know how to capture for the plt.plot input.
3.
for i in range(len(y)):
c= (y[i])
f = datetime.strptime(c, '%d/%m/%Y')
v=list(f)
plot.plot(x,v) # error message:'datetime.datetime' object is not iterable
感谢任何帮助
您必须交换 index
和 columns
,然后将 index
转换为 datetime
。然后 .plot()
.
df_wanted = pd.pivot_table(df, columns='c',
index='a', values='b')
df_wanted.index = pd.to_datetime(df_wanted.index)
df_wanted.plot()
如果你想使用matplotlib.pyplot
绘图那么你只能指定数字坐标(即非字符串)。但是您可以将 str
标签分配给这些坐标
因此您可能需要考虑这种代码:
from matplotlib import pyplot as plt
import datetime
yValues = [10,15,8,7,1]
xLabels = ['a', datetime.datetime.now().strftime("%Y-%M-%d"),
'b', 'c', 'd']
fig = plt.figure()
ax = fig.add_axes([0.1, 0.2, 0.8, 0.7])
ax.plot(yValues)
ax.set_xticks(range(len(yValues)))
ax.set_xticklabels(xLabels, rotation = 'vertical')
fig.show()
我有一个数据集:
a b c
11/01/1999 8 367235
11/01/1999 5 419895
11/01/1999 1 992194
23/03/1999 4 419895
30/04/1999 1 992194
02/06/1999 9 419895
08/08/1999 2 367235
12/08/1999 3 419895
17/08/1999 10 992194
22/10/1999 3 419895
04/12/1999 4 992194
04/03/2000 2 367235
29/09/2000 9 367235
30/09/2000 9 367235
我正在尝试进行可视化,以显示随时间变化的值集("b" 列)("a" 列):
*请注意,这只是为了描绘我想要的一般图片 - 这不是我的数据集。
我将数据集更改为数据透视表 table,它在第一列中列出了列 "c" 值,在第一行列出了 "a" 值,在第一行列出了 "b" 值在数据框内。令人高兴的是,我已经能够从数据透视表 table 中提取值的行,并将其用作 matplotlib 图(代表图表上的 y 值)的输入。不幸的是,我无法以 acceptable 格式提取枢轴 table 的 header,这是一个问题,因为 header 代表图表上的 x 值。
这是有效的代码部分:
from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
from datetime import datetime
df = (pd.read_csv('orcs.csv'))
df_wanted = pd.pivot_table(
df,
index='c',
columns='a',
values='b')
lala = df_wanted.as_matrix()
x=np.array(lala[1,:])
y = (df_wanted.columns.astype(str).tolist())
这是代码中不起作用的部分。
我尝试了几种替代方法(包括错误消息):
1.
plt.plot(x,y)# error: could not convert string to float: '02/06/1999'
2.
for i in range(len(y)):
c= (y[i])
print(c) #no error message, but gives me an output I don't know how to capture for the plt.plot input.
3.
for i in range(len(y)):
c= (y[i])
f = datetime.strptime(c, '%d/%m/%Y')
v=list(f)
plot.plot(x,v) # error message:'datetime.datetime' object is not iterable
感谢任何帮助
您必须交换 index
和 columns
,然后将 index
转换为 datetime
。然后 .plot()
.
df_wanted = pd.pivot_table(df, columns='c',
index='a', values='b')
df_wanted.index = pd.to_datetime(df_wanted.index)
df_wanted.plot()
如果你想使用matplotlib.pyplot
绘图那么你只能指定数字坐标(即非字符串)。但是您可以将 str
标签分配给这些坐标
因此您可能需要考虑这种代码:
from matplotlib import pyplot as plt
import datetime
yValues = [10,15,8,7,1]
xLabels = ['a', datetime.datetime.now().strftime("%Y-%M-%d"),
'b', 'c', 'd']
fig = plt.figure()
ax = fig.add_axes([0.1, 0.2, 0.8, 0.7])
ax.plot(yValues)
ax.set_xticks(range(len(yValues)))
ax.set_xticklabels(xLabels, rotation = 'vertical')
fig.show()