python - Pandas 中的布尔索引
问题描述
我有以下数据框
books = pd.Series(data = ['Great Expectations', 'Of Mice and Men', 'Romeo and Juliet', 'The Time Machine', 'Alice in Wonderland' ])
authors = pd.Series(data = ['Charles Dickens', 'John Steinbeck', 'William Shakespeare', ' H. G. Wells', 'Lewis Carroll' ])
user_1 = pd.Series(data = [3.2, np.nan ,2.5])
user_2 = pd.Series(data = [5., 1.3, 4.0, 3.8])
user_3 = pd.Series(data = [2.0, 2.3, np.nan, 4])
user_4 = pd.Series(data = [4, 3.5, 4, 5, 4.2])
dict_temp = {'Book Title':books, 'Author': authors, 'User 1': user_1, 'User 2':user_2, 'User 3': user_3, 'User 4': user_4}
pd.set_option('precision', 1)
temp_df = pd.DataFrame(dict_temp)
我的目标是选择所有用户评分 = 5.0 的列。当我执行以下操作时,它工作正常。
temp_df[temp_df == 5.0]
但是,如果我想选择用户评分 > 4.0 的列,结果会有所不同。为什么是这样?
temp_df[temp_df > 4.0]
这是我运行 temp_df == 5.0 v/s temp_df > 4.0 时发生的屏幕截图。我的问题是为什么我会看到书名和作者栏?
PS我能够通过这条线达到我想要的结果
temp_df[temp_df[['User 1','User 2','User 3','User 4']] > 4.0]
解决方案
使用您的代码运行以下命令没有问题。
我明确地将 a 设置4.0
为 afloat
这可能会对您有所帮助,尽管对我来说这不是问题。
temp_df = pd.DataFrame(dict_temp)
print(temp_df)
temp_df = temp_df[temp_df > float(4.0)]
print(temp_df)
输出
[5 rows x 6 columns]
Book Title Author ... User 3 User 4
0 Great Expectations Charles Dickens ... NaN NaN
1 Of Mice and Men John Steinbeck ... NaN NaN
2 Romeo and Juliet William Shakespeare ... NaN NaN
3 The Time Machine H. G. Wells ... NaN 5.0
4 Alice in Wonderland Lewis Carroll ... NaN 4.2
推荐阅读
- docker - 身份服务器 4 和 Ocelot 与 Docker 的集成
- python-2.7 - pycharm使用anaconda解释器
- javascript - 使用Rails允许/替换逗号作为输入类型=“数字”的数字分隔符
- audio - 将比特流音频格式编码为 SDIF VHDL
- angular - Angular父子通信
- ios - UICollectionView 特定单元格带在 oder 单元格前面
- python - 如何根据概率从列表中选择项目
- css - 如何从网站中提取画布动画创建者/触发器功能?
- c# - 使用 CollectionChanged 更改 ComboBox 项目源和更新通知
- asp.net - 如何在 Aspx 页面中使用 C# 代码在 Input 元素中添加值?