【问题标题】:cannot remove index information from float64 object无法从 float64 对象中删除索引信息
【发布时间】:2019-08-29 23:43:18
【问题描述】:

我想根据条件对数据进行一些统计处理。但我在下面的if statement 阶段不断收到此错误,我认为这很可能是因为我无法访问浮点对象Q11 中的值。

ValueError:Series 的真值不明确。 ?使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()

import pandas as pd

raw_data = {'patient': [242, 151, 111,122, 342],
        'obs': [1, 2, 3, 1, 2],
        'treatment': [0, 1, 0, 1, 0],
        'score': ['strong', 'weak', 'weak', 'weak', 'strong']}

df = pd.DataFrame(raw_data, columns = ['patient', 'obs', 'treatment', 'score'])

#print(df)



     patient  obs  treatment   score
0      242    1          0    strong
1      151    2          1      weak
2      111    3          0      weak
3      122    1          1      weak
4      342    2          0    strong

我定义了一个流程来获取一些信息

df_g=df.groupby("score")

veni_vidi = []

for col in df.columns:

    if col=='patient':

        Q11 = df_g[col].transform(lambda group: np.percentile(group, q=25))

        Q11.reset_index(inplace=True,drop=True) #trying to drop index from here but it seems not working!

        for val in df[col]:



            if val < Q11:  #This is giving error because of index I guess
                veni_vidi.append('veni')

            else:
                veni_vidi.append('vici')

我试图通过做来摆脱索引;

Q11.reset_index(inplace=True,drop=True)

0    267.0
1    116.5
2    116.5
3    116.5
4    267.0
Name: patient, dtype: float64

但不能解决问题。

提前谢谢!

【问题讨论】:

  • 不,它给你一个错误,因为Q11 是一个系列。 242 小于整个系列意味着什么?
  • 但这似乎是一个 X/Y 问题?您需要实现的操作是什么?几乎可以肯定,有一种更好的方法可以删除循环并使用更简洁的 pandas 函数来做您需要的事情。
  • @ALollz 242 只是一个没有特殊含义的数字。这只是定义问题的可重现示例。
  • @ALollz 我尝试将 veni_vidi 添加到原始数据框中,在此之前我需要进行逻辑操作来定义它。为了问题,我需要保留循环。
  • 是的,我明白这一点,但请重新阅读我写的内容。在引发错误的那一行,您的语法val &lt; Q11字面意思 询问,是数字242 小于系列Q11。您不是在对照数字检查数字,而是对照整个系列检查单个数字,并期望单个真值。这是模棱两可的,如果它始终为 True,它应该是 True,还是至少一次为 True?

标签: python pandas if-statement logical-operators


【解决方案1】:

我们可以使用np.where修复它

df_g=df.groupby("score")

veni_vidi = []

for col in df.columns:

    if col=='patient':

        Q11 = df_g[col].transform(lambda group: np.percentile(group, q=25))


        for val in df[col]:

            veni_vidi.append(np.where(val < Q11,'veni','vici'))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2016-11-05
    • 2014-12-10
    • 1970-01-01
    • 2023-04-08
    • 2014-09-05
    相关资源
    最近更新 更多