考虑以下代码:
import numpy as np
import pandas as pd
df = pd.DataFrame(
{"AAA": [4, 5, 6, 7], "BBB": [10, 20, 30, 40], "CCC": [100, 50, -30, -50]}
)
df[[True, False, False, True]] = np.array([2,5]).reshape(2,1)
df
AAA BBB CCC
0 2 2 2
1 5 20 50
2 6 30 -30
3 5 5 5
Run Code Online (Sandbox Code Playgroud)
这将广播应用于数据帧,并导致第一行仅包含值 2,第四行仅包含值 5。正如我所料。现在,我只需向 df 添加一列并应用类似的转换:
df["logic"] = 9
df[[True, False, False, True]] = np.array([3,7]).reshape(2,1)
Run Code Online (Sandbox Code Playgroud)
我现在得到的不是提供仅包含 3 的第一行和仅包含 7 的最后一行
ValueError:使用 ndarray 设置时必须具有相等的 len 键和值
有人可以解释一下,为什么会发生这种情况?
我目前正在阅读《理解使用 C 指针》一书,我偶然发现了以下示例:
int (*(arr1[])) = {(int[]){0,1,2}, (int[]) {3,4,5}, (int[]){6,7,8}}
Run Code Online (Sandbox Code Playgroud)
然后作者展示了 arr1[0][0]...arr1[2][2] 的内存布局,可以看到元素存储在连续的区域中。
关于这个例子我有两个问题:
int *(arr1[]) = ...
Run Code Online (Sandbox Code Playgroud)
我将其读为: arr1 被声明为包含指向 int 的指针的数组。
a = {...}
Run Code Online (Sandbox Code Playgroud)
并列出以逗号分隔的元素。现在,在前面的示例中,arr1 的元素应该是指针(除非我对声明的理解是错误的)。因此,我认为对于第一个成员
int *(arr1[])= {(int[]){0,1,2},...
Run Code Online (Sandbox Code Playgroud)
创建一个包含 0,1,2 的数组,然后返回其地址(这对应于转换为 int[])并将其用作第一个指针的值。然而,如果这是真的,那么数字 0、1、2 可能位于与数字 3、4、5 不同的内存段中。
有人可以进一步解释一下吗?