如果您想了解错误:系列的真实值不明确-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
- Apply 和 Lambda 函数 - ValueError:系列的真值不明确使用 a.empty、a.bool()、a.item()、a.any() 或 a.all() 修复更好
- Choropleth-系列的真值不明确
- numpy:具有多个元素的数组的真值不明确
- Pandas Python Regex:错误:无需重复
错误:系列的真实值不明确-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 函数创建一个新列,如果“性别”为“女性”,则将“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-系列的真值不明确?
几个月前,我才开始使用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行以外的所有内容,以查看数据是否是问题,仅列举一些我尝试过的修复程序。
如果有人可以提供以下帮助,将不胜感激:
- 我是否正确假设是颜色函数引起了错误?
- 如何解决该问题?如果“ permits = None”只是空白而不是黑色,我可以,但是如果fillcolor行不是问题,我该如何解决?
- 在处理此类转换时,是否会经常出现这种类型的错误?如果可以,我是否可以操纵数据文件本身来解决问题?
如果有人知道如何解决该问题,将不胜感激。谢谢您的帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
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 从 点 ,其中 任何 的条目是不相等的条目 所有 项目 q 从 max_pair 。
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:错误:无需重复等相关知识,可以在本站进行查询。
本文标签: