Python 获取Numpy where条件的错误
我正在尝试使用数据库中其他列的Python 获取Numpy where条件的错误,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我正在尝试使用数据库中其他列的np.where条件创建一个新列 我的代码 df5['RiskSubType']=np.where(new_df['Snow_Risk']==1,(( ' Heavy Snow forecasted at ' +df5.LOCATION.mask(new_df.LOCATION=='',df5.LOCATION_CITY))), np.where(df5['Wind_Risk']==1,( ' Heavy Wind forecasted at ' +df5.
np.where
条件创建一个新列
我的代码
df5['RiskSubType']=np.where(new_df['Snow_Risk']==1,(( ' Heavy Snow forecasted at ' +df5.LOCATION.mask(new_df.LOCATION=='',df5.LOCATION_CITY))),
np.where(df5['Wind_Risk']==1,( ' Heavy Wind forecasted at ' +df5.LOCATION.mask(df5.LOCATION=='',df5.LOCATION_CITY)),
np.where(df5['Precip_Risk']==1,( ' Heavy Rain forecasted at ' +df5.LOCATION.mask(df5.LOCATION=='',df5.LOCATION_CITY)),"No Risk Identified")))
错误
如何解决此问题或以其他方式解决此问题。请提供以下内容:
d = {'LOCATION': ['?', '?'],
'LOCATION_CITY': ['?', '?'],
'Wind_Risk': [1, 0],
'Precip_Risk': [1, 0],
'Snow_Risk': [1, 0]}
df = pd.DataFrame(data=d)
请提供如下内容:
d = {'LOCATION': ['?', '?'],
'LOCATION_CITY': ['?', '?'],
'Wind_Risk': [1, 0],
'Precip_Risk': [1, 0],
'Snow_Risk': [1, 0]}
df = pd.DataFrame(data=d)
首先,你的设计/代码风格很难理解,你应该考虑简化它。 出现问题的原因是,您试图在
np.where
函数中粉碎字符串和数组。报告说:
其中(条件[,x,y])
返回根据条件从x或y中选择的元素
参数:
条件:类似阵列,布尔
如果为真,则为x,否则为y。x、 y:数组_-like
要从中选择的值。x、 y和状态需要能够广播到某种形状 返回: 出:恩达雷 一个数组,其元素来自条件为真的x,元素来自其他地方的y 正如您所看到的,x和y需要能够广播到某些形状。查看以下内容: 6.4。广播 Numpy的另一个强大功能是广播。广播需要 在不同形状的数组之间执行操作时放置。 比如说
>>> a = np.array([
[0, 1],
[2, 3],
[4, 5],
])
>>> b = np.array([10, 100])
>>> a * b
array([[ 0, 100],
[ 20, 300],
[ 40, 500]])
a和b的形状不匹配。为了继续,Numpy将
将b拉伸到第二个维度,好像它被堆叠了三次
自作主张。然后,操作将按元素进行
广播的规则之一是,只有大小为1的尺寸才能播放
拉伸(如果数组只有一个维度,则所有其他维度
被视为用于广播目的,尺寸为1)。在
上面的示例b是1D,具有形状(2,)。用于使用,
它有两个维度,Numpy将大小为1的另一个维度添加到b。
b现在有形状(1,2)。这个新维度现在可以拉伸三倍
使b的形状与a的形状(3,2)匹配的时间
另一个规则是从最后一个维度到最后一个维度进行比较
第一。任何不匹配的标注都必须拉伸才能成为
同样大小。但是,根据之前的规则,只有
尺寸为1的尺寸可以拉伸。这意味着某些形状不能
广播和Numpy将给您一个错误:
>>> c = np.array([
[0, 1, 2],
[3, 4, 5],
])
>>> b = np.array([10, 100])
>>> c * b
ValueError: operands could not be broadcast together with shapes (2,3) (2,)
这里发生的是,Numpy再次向b添加了一个维度,使
它的形状是(1,2)。b和c最后尺寸的尺寸(2和
3)进行比较,发现不同。既然没有
这些尺寸为Numpy给出的尺寸1(因此,不可拉伸)
向上移动并产生错误
将上面的c和b相乘的解决方案是
Numpy必须添加该额外维度作为
B这是通过使用None为第二个维度编制索引来实现的。这个
然后,b的形状变成(2,1),这与广播兼容
用c:
>>> c = np.array([
[0, 1, 2],
[3, 4, 5],
])
>>> b = np.array([10, 100])
>>> c * b[:, None]
array([[ 0, 10, 20],
[300, 400, 500]])
这些规则的良好视觉描述,以及一些高级
广播应用程序可以在Numpy广播规则教程中找到
所以问题是,您试图将
(n,)
(第一个位置)广播到标量(第一个字符串)广播到(m,)
(第二个位置)广播到标量(第二个字符串)广播到(k,)
(第三个位置)等等。自n!=m!=k
可以也将是这样,拉伸的尺寸与广播不匹配。因此,首先,你的设计/代码风格很难理解,你应该考虑简化它。
出现问题的原因是,您试图在np.where
函数中粉碎字符串和数组。报告说:
其中(条件[,x,y])
返回根据条件从x或y中选择的元素
参数:
条件:类似阵列,布尔
如果为真,则为x,否则为y。
x、 y:数组_-like
要从中选择的值。x、 y和状态需要能够广播到某种形状
返回:
出:恩达雷
一个数组,其元素来自条件为真的x,元素来自其他地方的y
正如您所看到的,x和y需要能够广播到某些形状。查看以下内容:
6.4。广播
Numpy的另一个强大功能是广播。广播需要
在不同形状的数组之间执行操作时放置。
比如说
>>> a = np.array([
[0, 1],
[2, 3],
[4, 5],
])
>>> b = np.array([10, 100])
>>> a * b
array([[ 0, 100],
[ 20, 300],
[ 40, 500]])
a和b的形状不匹配。为了继续,Numpy将
将b拉伸到第二个维度,好像它被堆叠了三次
自作主张。然后,操作将按元素进行
广播的规则之一是,只有大小为1的尺寸才能播放
拉伸(如果数组只有一个维度,则所有其他维度
被视为用于广播目的,尺寸为1)。在
上面的示例b是1D,具有形状(2,)。用于使用,
它有两个维度,Numpy将大小为1的另一个维度添加到b。
b现在有形状(1,2)。这个新维度现在可以拉伸三倍
使b的形状与a的形状(3,2)匹配的时间
另一个规则是从最后一个维度到最后一个维度进行比较
第一。任何不匹配的标注都必须拉伸才能成为
同样大小。但是,根据之前的规则,只有
尺寸为1的尺寸可以拉伸。这意味着某些形状不能
广播和Numpy将给您一个错误:
>>> c = np.array([
[0, 1, 2],
[3, 4, 5],
])
>>> b = np.array([10, 100])
>>> c * b
ValueError: operands could not be broadcast together with shapes (2,3) (2,)
这里发生的是,Numpy再次向b添加了一个维度,使
它的形状是(1,2)。b和c最后尺寸的尺寸(2和
3)进行比较,发现不同。既然没有
这些尺寸的尺寸为1(有