Python 如何调用熊猫中的各个列?
我知道这一定是一个非常基本的问题,但奇怪的是,我在网上阅读的资源似乎不太清楚如何做到以下几点: 如何为Python 如何调用熊猫中的各个列?,python,pandas,Python,Pandas,我知道这一定是一个非常基本的问题,但奇怪的是,我在网上阅读的资源似乎不太清楚如何做到以下几点: 如何为pandas中的特定列编制索引 例如,从csv导入数据后,我有一个带有各个日期的pandasSeries对象,以及每个日期对应的美元金额 现在,我想按月份对日期进行分组(并添加给定月份各自的美元金额)。我计划创建一个数组,其中索引列是月份,下一列是该月份的美元金额总和。然后,我将使用此数组并从中创建另一个pandas Series对象 我的问题是,我似乎无法调用当前pandas系列对象中的特定列
pandas
中的特定列编制索引
例如,从csv导入数据后,我有一个带有各个日期的pandasSeries
对象,以及每个日期对应的美元金额
现在,我想按月份对日期进行分组(并添加给定月份各自的美元金额)。我计划创建一个数组,其中索引列是月份,下一列是该月份的美元金额总和。然后,我将使用此数组并从中创建另一个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
您正在将CSV文件读入一个系列。序列是一维对象-没有与之关联的列。您看到该系列(日期)的索引,可能会认为这是另一列,但事实并非如此 您有两种选择:您可以将其转换为数据帧(通过调用
reset\u index()
或到\u 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
因为您已经有了一个格式为date的索引,所以使用重采样按月分组非常简单,所以我建议将其作为一个系列
series.resample('M').sum()
Out:
Dates
2015-01-31 1040
2015-02-28 1927
2015-03-31 193
Freq: M, Name: Amount, dtype: int64
但是,您始终可以使用以下命令将其转换为数据帧:
df = series.to_frame('Value')
现在,您可以使用df['Value']
选择单个列。可以在数据帧和序列上进行重采样:
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()生成:
您正在将CSV文件读入一个系列。一个系列是一个一维对象,没有与之关联的列。您看到该系列的索引(日期),可能会认为这是另一个列,但事实并非如此
您有两种选择:您可以将其转换为数据帧(通过调用reset\u index()
或到\u 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
因为您已经有了一个格式为date的索引,所以使用重采样按月分组非常简单,所以我建议将其作为一个系列
series.resample('M').sum()
Out:
Dates
2015-01-31 1040
2015-02-28 1927
2015-03-31 193
Freq: M, Name: Amount, dtype: int64
但是,您始终可以使用以下命令将其转换为数据帧:
df = series.to_frame('Value')
现在,您可以使用df['Value']
选择单个列。可以在数据帧和序列上进行重采样:
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()生成:
我不确定我是否遵守了,但要获得一个月的系列美元金额,您可以执行pd.groupby(s,by=s.index.month).sum()
其中s
是您的序列
对象。序列中也没有列。列用于数据帧。pd.read\u csv
不应返回序列
对象,除非数据中只有1列,但您说有1列以上。它应返回允许的数据帧
对象你可以访问列。你是如何在中读取csv文件的?谢谢你的回答-我会随时用我的代码更新我的问题请发布示例数据请查看更新-谢谢!我不确定我是否遵守,但要获得一个月的美元金额,你可以做pd.groupby(s,by=s.index.month).sum()
其中s
是您的序列
对象。序列中也没有列。列用于数据帧。pd.read\u csv
不应返回序列
对象,除非数据中只有1列,但您说有1列以上。它应返回允许的数据帧
对象您可以访问专栏。您如何阅读中的csv文件?感谢您的回答-我会随时用我的代码更新我的问题请同时发布示例数据请查看更新-谢谢!感谢您的出色回答。您澄清了我的误解,并为我提供了关于备选方案的详细解释。这谢谢你的精彩回答。你澄清了我的误解,并为我提供了详细的备选方案解释。