我有一个像这样的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
答案 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),:]