【问题标题】:Boolean indexing in pandas dataframes熊猫数据框中的布尔索引
【发布时间】:2021-03-19 15:13:07
【问题描述】:

我正在尝试对 pandas DataFrame 应用布尔索引。

nm - 存储玩家的名字

ag- 存储玩家年龄

sc - 存储分数

capt - 存储布尔索引值

import pandas as pd 
nm=pd.Series(['p1','p2', 'p3', 'p4'])
ag=pd.Series([12,17,14, 19])
sc=pd.Series([120, 130, 150, 100])
capt=[True, False, True, True]
Cricket=pd.DataFrame({"Name":nm,"Age":ag ,"Score":sc}, index=capt)
print(Cricket) 

输出:

       Name  Age  Score
True   NaN  NaN    NaN
False  NaN  NaN    NaN
True   NaN  NaN    NaN
True   NaN  NaN    NaN

每当我运行上面的代码时,我都会得到一个填充了 NaN 值的 DataFrame。唯一可行的情况是 capt 没有重复元素。

即当capt=[False, True](并且为 nm、ag 和 sc 提供合理的值)时,此代码按预期工作。

我正在运行 python 3.8.5、pandas 1.1.1这是一个已弃用的功能吗?

期望的输出:

        Name  Age  Score
True    p1   12    120
False   p2   17    130
True    p3   14    150
True    p4   19    100

【问题讨论】:

  • 预期输出是什么?
  • @jezrael 我现在在我的问题中包含了所需的输出。而且你的答案也得到了它。谢谢:)

标签: python-3.x pandas dataframe dictionary series


【解决方案1】:

为每个系列设置索引值,以避免每个系列的默认 RangeIndex 与来自capt 的新索引值不匹配:

capt=[True, False, True, True]
nm=pd.Series(['p1','p2', 'p3', 'p4'], index=capt)
ag=pd.Series([12,17,14, 19], index=capt)
sc=pd.Series([120, 130, 150, 100], index=capt)

Cricket=pd.DataFrame({"Name":nm,"Age":ag ,"Score":sc})
print(Cricket) 
      Name  Age  Score
True    p1   12    120
False   p2   17    130
True    p3   14    150
True    p4   19    100

详情

print(pd.Series(['p1','p2', 'p3', 'p4'])) 
0    p1
1    p2
2    p3
3    p4
dtype: object

print(pd.Series(['p1','p2', 'p3', 'p4'], index=capt)) 
True     p1
False    p2
True     p3
True     p4
dtype: object

Boolean indexing正在过滤:

capt=[True, False, True, True]
nm=pd.Series(['p1','p2', 'p3', 'p4'])
ag=pd.Series([12,17,14, 19])
sc=pd.Series([120, 130, 150, 100])

Cricket=pd.DataFrame({"Name":nm,"Age":ag ,"Score":sc})
print(Cricket) 
  Name  Age  Score
0   p1   12    120
1   p2   17    130
2   p3   14    150
3   p4   19    100

print (Cricket[capt])
  Name  Age  Score
0   p1   12    120
2   p3   14    150
3   p4   19    100

【讨论】:

  • @perpetuallyperplexed - 因为Dataframe的索引值继承自Series.index,如果不同,获取mismach和misisng值,类似here
猜你喜欢
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
  • 2022-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多