我知道这一定是一个非常基本的问题,但奇怪的是,我在网上看到的资源似乎不太清楚如何做到以下几点:
如何为pandas
中的特定列编制索引?
例如,从csv导入数据后,我有一个带有各个日期的pandas Series
对象,以及每个日期的相应美元金额。
现在,我想按月对日期进行分组(并为每个月添加各自的美元金额)。我计划创建一个数组,其中索引列是月份,下一列是该月份的美元金额总和。然后,我将使用此数组并从中创建另一个pandas Series对象。
我的问题是我似乎无法调用当前pandas系列对象中的特定列。
任何帮助?
编辑添加:
from pandas import Series
from matplotlib import pyplot
import numpy as np
series = Series.from_csv('FCdata.csv', header=0, parse_dates = [0], index_col =0)
print(series)
pyplot.plot(series)
pyplot.show() # this successfully plots the x-axis (date) with the y-axis (dollar amount)
dates = series[0] # this is where I try to call the column, but with no luck
这是我的数据在csv中的样子:
Dates Amount
1/1/2015 112
1/2/2015 65
1/3/2015 63
1/4/2015 125
1/5/2015 135
1/6/2015 56
1/7/2015 55
1/12/2015 84
1/27/2015 69
1/28/2015 133
1/29/2015 52
1/30/2015 91
2/2/2015 144
2/3/2015 114
2/4/2015 59
2/5/2015 95
2/6/2015 72
2/9/2015 73
2/10/2015 119
2/11/2015 133
2/12/2015 128
2/13/2015 141
2/17/2015 105
2/18/2015 107
2/19/2015 81
2/20/2015 52
2/23/2015 135
2/24/2015 65
2/25/2015 58
2/26/2015 144
2/27/2015 102
3/2/2015 95
3/3/2015 98
答案 0 :(得分:2)
您正在将CSV文件读入系列。 Series是一维对象 - 没有与之关联的列。你看到该系列的索引(日期),可能认为这是另一个专栏,但事实并非如此。
您有两种选择:您可以将其转换为DataFrame(通过调用reset_index()
或to_frame
或将其用作系列。
series.resample('M').sum()
Out:
Dates
2015-01-31 1040
2015-02-28 1927
2015-03-31 193
Freq: M, Name: Amount, dtype: int64
由于您已经将索引格式化为日期,因此按月分组并重新采样非常简单,因此我建议将其保留为系列。
但是,您始终可以使用以下命令将其转换为DataFrame:
df = series.to_frame('Value')
现在,您可以使用df['Value']
来选择该单个列。可以在DataFrame和Series上进行重新采样:
df.resample('M').sum()
Out:
Value
Dates
2015-01-31 1040
2015-02-28 1927
2015-03-31 193
如果你想在绘图中使用它,你可以访问索引:
series.index # df.index would return the same
Out:
DatetimeIndex(['2015-01-01', '2015-01-02', '2015-01-03', '2015-01-04',
'2015-01-05', '2015-01-06', '2015-01-07', '2015-01-12',
'2015-01-27', '2015-01-28', '2015-01-29', '2015-01-30',
'2015-02-02', '2015-02-03', '2015-02-04', '2015-02-05',
'2015-02-06', '2015-02-09', '2015-02-10', '2015-02-11',
'2015-02-12', '2015-02-13', '2015-02-17', '2015-02-18',
'2015-02-19', '2015-02-20', '2015-02-23', '2015-02-24',
'2015-02-25', '2015-02-26', '2015-02-27', '2015-03-02',
'2015-03-03'],
dtype='datetime64[ns]', name='Dates', freq=None)
注意:对于基本的时间序列图表,您可以使用pandas'绘图工具。
df.plot()
产生:
df.resample('M').sum().plot()
产生: