如何在选择列时查找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'
答案 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