根据数据框中的列切片数据

时间:2015-08-12 02:10:53

标签: python pandas

我有一个像这样的DataFrame:

Month   Day Year    TmaxF
 4       1  1912    56.00
 4       2  1912    56.00
 4       3  1912    74.00
 1       1  1913    38
 1       2  1913    28
 1       3  1913    21
 1       1  1914    30.00
 1       2  1914    31.00
 1       3  1914    20.00

我想只选择1913年和1914年的数据。.isin不是我想要的,因为这是一个简化的数据集。

我更喜欢这样的东西:

df.loc['1913':'1914'] 

但是当我将Year设置为索引并运行此代码时,它会返回错误:

TypeError: cannot do slice indexing on <class 'pandas.core.index.Int64Index'> with these indexers [1913] of <type 'str'>

df.info()返回:

Month     36397 non-null int64
Day       36397 non-null int64
Year      36397 non-null int64
TmaxF     35600 non-null float64

2 个答案:

答案 0 :(得分:2)

首先,请注意您的数据是数字(int64)而不是字符串。从您尝试查询数据的方式来看,我认为您遵循了将日期作为索引的指南(在这种情况下,您可以按日期或部分进行切片)

除此之外,重要的是要记住df.loc用于根据索引进行切片(这不会出现在您发送的表中)。

虽然您可以将年份设置为索引,但是按照您希望使用"boolean indexing"分割数据的更优雅方式是:

df[(df.Year >= 1913) && (df.Year <= 1914)]

如果您仍然坚持将年份作为索引,可以按照以下步骤进行:

df.index = df.Year
df.loc[1913:1914]

答案 1 :(得分:0)

将年份设置为索引后,请使用slice

df.set_index('Year',inplace=True)
df.loc[slice('1913','1914'),:]
#     Month Day  TmaxF
#Year                 
#1913     1   1     38
#1913     1   2     28
#1913     1   3     21
#1914     1   1  30.00
#1914     1   2  31.00
#1914     1   3  20.00

这里我使用字符串作为索引:

df.index
#Index([u'1912', u'1912', u'1912', u'1913', u'1913', u'1913', u'1914', u'1914',
#   u'1914'],
#  dtype='object', name=u'Year')

看起来您的Year列最初是整数,因此您的索引可能是

df.index
#Int64Index([1912, 1912, 1912, 1913, 1913, 1913, 1914, 1914, 1914], dtype='int64', name=u'Year')

如果是,则使切片器范围整数:df.loc[slice(1913,1914),:]