如何在大熊猫中调用单个列?

时间:2017-05-19 16:51:55

标签: python pandas

我知道这一定是一个非常基本的问题,但奇怪的是,我在网上看到的资源似乎不太清楚如何做到以下几点:

如何为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

1 个答案:

答案 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()产生:

enter image description here

df.resample('M').sum().plot()产生:

enter image description here