限制Pandas Excelfile中的索引

时间:2014-10-19 21:03:57

标签: python pandas

我不确定我是否会描述这一点,但我会尝试。

我有几个excel文件,包含大约20列和10k左右的行。假设列名的格式为col1,col2 ... col20。

Col2是时间戳列,因此,例如,值可以是:“2012-07-25 14:21:00”。

我想将excel文件读入DataFrame并执行一些时间序列和分组操作。

以下是加载Excel文件的一些简化代码:

xl = pd.ExcelFile(os.path.join(dirname, filename))
df = xl.parse(xl.sheet_names[0], index_col=1) # Col2 above

当我跑步时

df.index
它给了我:

<class 'pandas.tseries.index.DatetimeIndex'>
[2012-01-19 15:37:55, ..., 2012-02-02 16:13:42]
Length: 9977, Freq: None, Timezone: None

正如所料。但是,检查列,我得到:

Index([u'Col1', u'Col2',...u'Col20'], dtype='object')

这可能就是我遇到一些我想做的操作问题的原因。例如,当我跑:

df.groupby[category_col].count()

我希望得到一个数据帧,每个类别包含1行,1列包含该类别的计数。相反,我得到一个数据帧,每个类别有1行,19列描述该列/类别对的值。

当我尝试重新采样时会发生同样的事情:

df.resample('D', how='count')

而不是每天记录数量的单列Dataframe,我得到:

2012-01-01   Col1   8
             Col2   8
             Coln   8
2012-01-02   Col1   10
             Col2   10
             Coln   10

这是正常行为吗?我怎么会每天只获得一个值,类别,哪个?

1 个答案:

答案 0 :(得分:0)

基于来自Wes McKinney的this博客文章,我认为问题在于我必须在特定专栏上运行我的操作,即我知道的列不会丢失数据。

所以不要这样做:

df.groupby[category_col].count()

我应该这样做:

df['col3'].groupby(df[category_col]).count()

和此:

df2.resample('D', how='count')

应该是这样的:

df2['col3'].resample('D', how='count')

结果更符合我所寻找的内容:

Category
Cat1    1232
Cat2    7677
Cat3    1053

Date 
2012-01-01      8
2012-01-02     66
2012-01-03     89