GVKun编程网logo

错误:系列的真实值不明确-Python pandas

11

如果您想了解错误:系列的真实值不明确-Pythonpandas的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于Apply和Lambda函数-ValueError:系列的真值不明确使用a.e

如果您想了解错误:系列的真实值不明确-Python pandas的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于Apply 和 Lambda 函数 - ValueError:系列的真值不明确使用 a.empty、a.bool()、a.item()、a.any() 或 a.all() 修复更好、Choropleth-系列的真值不明确、numpy:具有多个元素的数组的真值不明确、Pandas Python Regex:错误:无需重复的有价值的信息。

本文目录一览:

错误:系列的真实值不明确-Python pandas

错误:系列的真实值不明确-Python pandas

我知道以前曾有人问过这个问题,但是当我尝试if发表声明时却遇到错误。我查看了此链接,但对我而言并没有太大帮助。我dfs是DataFrames的列表。

我正在尝试以下,

for i in dfs:    if (i[''var1''] < 3.000):       print(i)

给出以下错误:

ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。

我尝试以下,并得到同样的错误。

for i,j in enumerate(dfs):    if (j[''var1''] < 3.000):       print(i)

我的var1数据类型是float32。我没有使用任何其他logical运算符和&|。在上面的链接中,这似乎是因为使用了逻辑运算符。为什么会得到ValueError

答案1

小编典典

这是一个小演示,它说明了为什么发生这种情况:

In [131]: df = pd.DataFrame(np.random.randint(0,20,(5,2)), columns=list(''AB''))In [132]: dfOut[132]:    A   B0   3  111   0  162  16   13   2  114  18  15In [133]: res = df[''A''] > 10In [134]: resOut[134]:0    False1    False2     True3    False4     TrueName: A, dtype: bool

当我们尝试检查是否这样的系列True-熊猫不知道该怎么做时:

In [135]: if res:     ...:     print(df)     ...:---------------------------------------------------------------------------ValueError                                Traceback (most recent call last)...skipped...ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

解决方法:

我们可以决定如何处理布尔值的系列-比如if应该返回True,如果 所有 的值是True

In [136]: res.all()Out[136]: False

或当 至少一个 值为True时:

In [137]: res.any()Out[137]: TrueIn [138]: if res.any():     ...:     print(df)     ...:    A   B0   3  111   0  162  16   13   2  114  18  15

Apply 和 Lambda 函数 - ValueError:系列的真值不明确使用 a.empty、a.bool()、a.item()、a.any() 或 a.all() 修复更好

Apply 和 Lambda 函数 - ValueError:系列的真值不明确使用 a.empty、a.bool()、a.item()、a.any() 或 a.all() 修复更好

如何解决Apply 和 Lambda 函数 - ValueError:系列的真值不明确使用 a.empty、a.bool()、a.item()、a.any() 或 a.all() 修复更好?

我正在尝试使用 Apply 和 Lambda 函数创建一个新列,如果“性别”为“女性”,则将“ID”值除以 219,如果“性别”为“男性”,则将其除以 393。首先,我尝试使用“性别”列,该列具有不起作用的分类变量。所以我创建了一个基于“性别”的二进制列,将 0 分配给“女性 1 到“男性”并使用该列,但没有用。

我仍然收到这样的值错误:

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

我的代码是

by_label_out_degree[normID] = by_label_out_degree.apply(lambda row: row[''ID'']/ 219 if row[''Gender2''] == 0 else row[''ID'']/ 393,axis=1)

我又要添加我的代码了!谢谢你的帮助!!

values = [
[42785,428855,''Energy'',''Female''],[43432,428686,''Trust'',''Male''],''Career'',''Personal'',428634,''Female'']
]
df: pd.DataFrame = pd.DataFrame(values,columns =[''ID'',''Target'',''Label'',''Gender''])
new_df = df.groupby([''Gender'',''Label'']).ID.count().reset_index()
new_df[''Gender2''] = new_df.Gender.map({''Female'':0,''Male'':1})
new_df[''normID''] = new_df.apply(lambda row: row[''ID'']/219 if row[''Gender2''] == 0 else row[''ID'']/393,axis = 1)

解决方法

修复

Gender 的使用效果很好

values = [
    [''Female'',''Access'',96],[''Female'',''Career'',165],[''Male'',236],''Energy'',445]
]
df: pd.DataFrame = pd.DataFrame(values,columns=[''Gender'',''Label'',''ID''])
df[''newcol''] = df.apply(lambda row: row[''ID''] / 219 if row[''Gender''] == ''Female'' else row[''ID''] / 393,axis=1)
print(df)

   Gender   Label   ID    newcol
0  Female  Access   96  0.438356
1  Female  Career  165  0.753425
2    Male  Access  236  0.600509
3    Male  Energy  445  1.132316

更好

使用numpy.where

import numpy as np
import pandas as pd

values = [[''Female'',445]]
df: pd.DataFrame = pd.DataFrame(values,''ID''])
df[''newcol''] = np.where(df[''Gender''] == ''Female'',df[''ID''] / 219,df[''ID''] / 393)
print(df)

Choropleth-系列的真值不明确

Choropleth-系列的真值不明确

如何解决Choropleth-系列的真值不明确?

几个月前,我才开始使用python进行编码,并且经常使用该论坛来寻求帮助,但是在处理和绘制系列图时遇到了无法解决的问题。我相信我知道错误发生在哪里,但无法提出解决方案。

请在下面查看我的代码:

    import geopandas as gpd,folium,pandas as pd,fiona,branca
    zipcode_data = pd.read_excel("we2001c_Test.xlsx")

    gdf = gpd.read_file("US_zipcodes.json")    # read Zipcode json
    gdf[''ZCTA5CE10''] = gdf[''ZCTA5CE10''].astype(int) # define zipcode in json as type integer

   gdf1 = gdf.merge(zipcode_data,left_on=[''ZCTA5CE10''],right_on=[''Zip Code''],how=''left'')
   gdf1.crs = fiona.crs.from_epsg(4326)

   gdf1.dropna(subset=[''1-unit Units''],inplace = True)

   colorscale1 = branca.colormap.linear.PuRd_09.scale(0,500)
   colorscale1.caption = "1 Unit"

   dict1 = gdf1.set_index(''Zip Code'')[''1-unit Units'']

 def style_function1(x):
     permits = dict1.get((x[''properties''][''Zip Code'']))
     return {
       ''fillOpacity'': 0.8,''weight'': 1,''fillColor'': ''#black'' if permits is None else colorscale1(permits)
       }

   # Create Map
   centroid=gdf1.geometry.centroid
   map1 = folium.Map(location=[centroid.y.mean(),centroid.x.mean()],zoom_start=5)

   # Create 1 Unt Map
   one_unit_map = folium.GeoJson(gdf1,name=''1 Unit Quantity'',style_function = style_function1,highlight_function=lambda x: {''weight'':3,''color'':''black''},show = False,overlay=True,).add_to(map1)

我得到的错误是: ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。

经过大量在线研究,我相信问题出在''fillColor'':''#black''(如果允许的话)是colorscale1(允许)。我知道使用“ or”和“ and”参数并尝试将所需的所有内容转换为整数时会发生这种情况。我也尝试过手动进入excel文件并删除除30行以外的所有内容,以查看数据是否是问题,仅列举一些我尝试过的修复程序。

如果有人可以提供以下帮助,将不胜感激:

  1. 我是否正确假设是颜色函数引起了错误?
  2. 如何解决该问题?如果“ permits = None”只是空白而不是黑色,我可以,但是如果fillcolor行不是问题,我该如何解决?
  3. 在处理此类转换时,是否会经常出现这种类型的错误?如果可以,我是否可以操纵数据文件本身来解决问题?

如果有人知道如何解决该问题,将不胜感激。谢谢您的帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

numpy:具有多个元素的数组的真值不明确

numpy:具有多个元素的数组的真值不明确

我真的很困惑为什么出现此错误。这是我的代码:

import numpy as npx = np.array([0, 0])y = np.array([10, 10])a = np.array([1, 6])b = np.array([3, 7])points = [x, y, a, b]max_pair = [x, y]other_pairs = [p for p in points if p not in max_pair]>>>ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()(a not in max_paix)>>>ValueError: The truth ...

令我感到困惑的是,以下各项工作正常:

points = [[1, 2], [3, 4], [5, 7]]max_pair = [[1, 2], [5, 6]]other_pairs = [p for p in points if p not in max_pair]>>>[[3, 4], [5, 7]]([5, 6] not in max_pair)>>>False

为什么在使用numpy数组时会发生这种情况?是not in/in暧昧所有脑干?
使用的正确语法是什么any()\all()

答案1

小编典典

numpy数组定义了一个自定义的相等运算符,即它们是实现__eq__magic函数的对象。因此,==运算符和依赖于这种相等性的所有其他功能/运算符称为此自定义相等性函数。

Numpy的相等性基于数组的元素明智比较。因此,作为回报,您将获得另一个具有布尔值的numpy数组。例如:

x = np.array([1,2,3])y = np.array([1,4,5])x == y

退货

array([ True, False, False], dtype=bool)

但是,in列表 结合使用的运算符要求仅返回 单个 布尔值的相等比较。这就是错误要求all或的原因any。例如:

any(x==y)

返回,True因为结果数组的至少一个值是True。相反

all(x==y)

会返回,False因为 并非 所得数组的所有值都是True

因此,在您的情况下,解决该问题的方法如下:

other_pairs = [p for p in points if all(any(p!=q) for q in max_pair)]

print other_pairs打印预期结果

[array([1, 6]), array([3, 7])]

为什么这样?好,我们来看一个项目 p ,其中 任何 的条目是不相等的条目 所有 项目 qmax_pair

Pandas Python Regex:错误:无需重复

Pandas Python Regex:错误:无需重复

我有一个带有几个奇怪字符“ *”和“-”的数据框。

import pandas as pdimport numpy as npdata = {''year'': [2010, 2011, 2012, 2011, 2012, 2010, 2011, 2012],        ''team'': [''Bears'', ''Bears'', ''Bears'', ''Packers'', ''Packers'', ''Lions'',     ''Lions'', ''Lions''],        ''wins'': [11, ''*'', 10, ''-'', 11, 6, 10, 4],        ''losses'': [5, 8, 6, 1, 5, 10, 6, 12]}football = pd.DataFrame(data, columns=[''year'', ''team'', ''wins'', ''losses''])

我想用‘0.00’替换奇怪的字符,但出现错误-

error: nothing to repeat

我了解这与正则表达式有关,但我仍然不知道如何解决该问题。

我用来替换字符的代码:

football.replace([''*'',''-''], [''0.00'',''0.00''], regex=True).astype(np.float64)

答案1

小编典典

* 是正则表达式中的特殊字符,您必须对其进行转义:

football.replace([''\*'',''-''], [''0.00'',''0.00''], regex=True).astype(np.float64)

或使用字符类:

football.replace([*-], ''0.00'', regex=True).astype(np.float64)

今天关于错误:系列的真实值不明确-Python pandas的分享就到这里,希望大家有所收获,若想了解更多关于Apply 和 Lambda 函数 - ValueError:系列的真值不明确使用 a.empty、a.bool()、a.item()、a.any() 或 a.all() 修复更好、Choropleth-系列的真值不明确、numpy:具有多个元素的数组的真值不明确、Pandas Python Regex:错误:无需重复等相关知识,可以在本站进行查询。

本文标签: