【问题标题】:Boolean indexing in PandasPandas 中的布尔索引
【发布时间】:2018-07-13 22:18:17
【问题描述】:

我有以下数据框

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 时发生的屏幕截图。我的问题是为什么我看到书名和作者列

附:我可以通过这条线达到我想要的结果

temp_df[temp_df[['User 1','User 2','User 3','User 4']] > 4.0]

【问题讨论】:

  • 你能添加你的预期输出吗?
  • 什么是temp_df.?我在你的代码中看不到它
  • 选择列或行。?
  • 抱歉,我添加了预期的输出屏幕和更多说明

标签: python pandas


【解决方案1】:

使用您的代码运行以下代码没有问题。

我将4.0 明确设置为float,这可能会对您有所帮助,尽管对我来说这不是问题。

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

【讨论】:

  • 我也能够正确运行代码..运行代码不是问题...问题在于预期的输出..我在问题中添加了更多详细信息。
  • 您的结果是正确的。请输入您期望输出的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多