在Python中创建与另一个变量的值有条件的变量

2024-09-20 04:04:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图生成一个变量,它的值取决于另一个变量的值。我的数据集是urban_classification,我正在尝试基于变量prc_urbain的值创建变量URBRUR。这是我的密码:

if urban_classification.prc_urbain>0.5 :
    urban_classification['URBRUR'] = "urban"
else:
    urban_classification['URBRUR'] = "rural"

我得到一条错误信息:

    Traceback (most recent call last):
  File "C:\Users\Utilisateur\AppData\Roaming\Python\Python37\site-packages\IPython\core\interactiveshell.py", line 3326, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-3-a94aadb86c32>", line 31, in <module>
    if urban_classification.prc_urbain>0.5 :
  File "C:\Users\Utilisateur\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\generic.py", line 1555, in __nonzero__
    self.__class__.__name__
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

你能指出我做错了什么吗

谢谢


Tags: inselfiflinesiteusersappdatafile
2条回答

错误消息:

The truth value of a Series is ambiguous.

来自

if urban_classification.prc_urbain>0.5 :

因为urban_classification.prc_urbain是一个pd.Series,因此urban_classification.prc_urbain>0.5也是一个由真/假值组成的pd.Series,python无法确定这个布尔值列表的值是否应该为真

要实现您想要的,您可以使用pd.cut

urban_classification["URBRUR"] = pd.cut(urban_classification.prc_urbain, [0, 0.5, 1], labels=["rural", "urban], include_lowest=True)

示例:

import pandas as pd                                                     
s = pd.Series([0, 0.1, 0.45, 0.6, 0.8, 1])                              
pd.cut(s, [0, 0.5, 1], labels=("rural", "urban"), include_lowest=True)                       


0    rural
1    rural
2    rural
3    urban
4    urban
5    urban

变量urban_classification.prc_urbain不是可以直接与0.5比较的数字,而是pandas.Series对象(基本上是一维数组)

您看到的错误要求您更加具体:是否希望数组中的所有值都是>0.5,其中任何一个值都是特定的,等等

如果您认为数组只由一个元素组成,则只需将[0]附加到Series对象,例如:

if urban_classification.prc_urbain[0] > 0.5:
    urban_classification['URBRUR'] = "urban"
else:
    urban_classification['URBRUR'] = "rural"

相关问题 更多 >