我正在使用pandas包中的pandas.HDFStore('Survey.h5')
从h5文件加载的调查数据。在这个DataFrame
中,所有行都是单个调查的结果,而列是单个调查中所有问题的答案。
我想将这个数据集减小到一个较小的DataFrame
,只包括特定问题上呈现出某个特定答案的行,即该列中所有值相同的行。我能够确定具有此条件的所有行的索引值,但我找不到如何删除这些行或仅保留这些行创建一个新的df。
In [36]: df
Out[36]:
A B C D
a 0 2 6 0
b 6 1 5 2
c 0 2 6 0
d 9 3 2 2
In [37]: rows
Out[37]: ['a', 'c']
In [38]: df.drop(rows)
Out[38]:
A B C D
b 6 1 5 2
d 9 3 2 2
In [39]: df[~((df.A == 0) & (df.B == 2) & (df.C == 6) & (df.D == 0))]
Out[39]:
A B C D
b 6 1 5 2
d 9 3 2 2
In [40]: df.ix[rows]
Out[40]:
A B C D
a 0 2 6 0
c 0 2 6 0
In [41]: df[((df.A == 0) & (df.B == 2) & (df.C == 6) & (df.D == 0))]
Out[41]:
A B C D
a 0 2 6 0
c 0 2 6 0
.loc
:In [12]: df = pd.DataFrame({"a": [1,2,3,4,5], "b": [4,5,6,7,8]})
In [13]: df
Out[13]:
a b
0 1 4
1 2 5
2 3 6
3 4 7
4 5 8
In [14]: df.loc[[0,2,4]]
Out[14]:
a b
0 1 4
2 3 6
4 5 8
In [15]: df.loc[1:3]
Out[15]:
a b
1 2 5
2 3 6
3 4 7
df.loc[1:3]
和some_list[1:3]
在符号上很相似,但前者使用的是包含上限的索引方式,而后者(以及Python的大多数情况)使用的是不包含上限的索引方式。 - Phoenix Meadowlark使用query
来搜索特定条件:
In [3]: df
Out[3]:
age family name
0 1 A john
1 36 A jason
2 32 A jane
3 26 B jack
4 30 B james
In [4]: df.query('age > 30 & family == "A"')
Out[4]:
age family name
1 36 A jason
2 32 A jane