您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python:Pandas系列-为什么使用loc?

Python:Pandas系列-为什么使用loc?

df[boolean_mask]选择行为boolean_maskTrue的行,但是在某些情况下可能不希望出现以下情况:当df具有布尔值的列标签时:

    In [229]: df = pd.DataFrame({True:[1,2,3],False:[3,4,5]}); df
Out[229]: 
   False  True 
0      3      1
1      4      2
2      5      3

您可能要使用df[[True]]选择True列。相反,它引发一个ValueError

    In [230]: df[[True]]
ValueError: Item wrong length 1 instead of 3.

与使用loc

    In [231]: df.loc[[True]]
Out[231]: 
   False  True 
0      3      1

相反,ValueError即使的结构df2几乎与df1上述相同,也不会出现以下情况:

    In [258]: df2 = pd.DataFrame({'A':[1,2,3],'B':[3,4,5]}); df2
Out[258]: 
   A  B
0  1  3
1  2  4
2  3  5

In [259]: df2[['B']]
Out[259]: 
   B
0  3
1  4
2  5

因此,df[boolean_mask]并不总是与相同df.loc[boolean_mask]。即使这可以说是不太可能的用例,但我还是建议您始终使用df.loc[boolean_mask]而不是,df[boolean_mask]因为df.loc的语法含义很明确。随着df.loc[indexer]自动知道,df.loc被选择行。相反,不清楚是否df[indexer]ValueError在不了解indexer和的细节的情况下选择行或列(或引发)df

df.loc[row_indexer, column_index]可以选择行 列。df[indexer]只能根据中的值类型和列值的类型选择行 列(再次,它们是布尔值吗?)。indexer``df

In [237]: df2.loc[[True,False,True], 'B']

Out[237]: 0 3 2 5 Name: B, dtype: int64

将切片传递给df.loc端点时,端点将包含在范围内。将切片传递给时df[...],该切片将被解释为半开间隔:

In [239]: df2.loc[1:2]

Out[239]: A B 1 2 4 2 3 5

In [271]: df2[1:2] Out[271]: A B 1 2 4

python 2022/1/1 18:32:16 有204人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶