选择列时,计算Pandas数据帧子集中的行数

时间:2018-05-23 16:00:16

标签: python pandas dataframe

如何在选择列时查找Pandas DataFrame子集中返回的行数?

在对Pandas DataFrame进行子集化并指定列时,如果子集有多个行,则返回一个Dataframe,但如果该子集只返回一行,则返回子集的值,我不能得到它的长度。

>>> df1 = pd.DataFrame({'A':['A1','A2','A1'],'B':['B1','B2','B3']})
>>> df2 = df1.set_index('A')
>>> df3 = df1.iloc[:2,].set_index('A')
>>> df2
     B
A
A1  B1
A2  B2
A1  B3
>>> df3
     B
A
A1  B1
A2  B2
>>> df2.loc['A1','B'].shape
(2,)
>>> df3.loc['A1','B'].shape
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'shape'

这是因为如果有多个行,Pandas会返回一个pandas对象,如果它只有一行,则会返回一个标量。

>>> df2.loc['A1','B']
A
A1    B1
A1    B3
Name: B, dtype: object
>>> df3.loc['A1','B']
'B1'

2 个答案:

答案 0 :(得分:1)

使用方括号表示索引列表:

print(df3.loc[['A1'], 'B'].shape)
# (1,)

这向pandas表示您要输出pd.Series个对象。

答案 1 :(得分:0)

啊.. Pandas selecting by label sometimes return series, sometimes returns dataframe

关键是将过滤条件作为列表传递:

>>> df3.loc[['A1'],'B'].size
1