小编vp_*_*050的帖子

类型错误:无法连接“<class 'list'>”类型的对象;仅 Series 和 DataFrame 对象有效

我有一个名为 d0、d1、d2、...d9 的 10 个数据帧的列表。全部都有 3 列和 100 行。

d0.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 100 entries, 0 to 99
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   0       100 non-null    float64
 1   1       100 non-null    float64
 2   2       100 non-null    float64
dtypes: float64(3)
memory usage: 2.5 KB
Run Code Online (Sandbox Code Playgroud)

我想合并所有数据框,这样我就可以有 3 列和 1000 行,然后将其转换为数组。

s1=[d0,d1,d2,d3,d4,d5,d6,d7,d8,d9]
s2=pd.concat([s1])
Run Code Online (Sandbox Code Playgroud)

上面的代码抛出错误:

TypeError: cannot concatenate object of type '<class 'list'>'; only Series and DataFrame objs are valid

type(s1)
list
Run Code Online (Sandbox Code Playgroud)

我使用 pandas …

python types numpy dataframe pandas

5
推荐指数
1
解决办法
6万
查看次数

如何将 pymoo 中的 NSGA 2 求解时的主导解集保存到数据帧中?

我正在尝试使用 NSGA 2 解决具有 3 个目标和 2 个决策变量的多目标优化问题。下面给出 NSGA2 算法和终止标准的 pymoo 代码。我的 pop_size 是 100,n_offspring 是 100。该算法迭代了 100 代。我想将所有 100 代的每一代中考虑的决策变量的所有 100 个值存储在一个数据框中。

pymoo 代码中的 NSGA2 实现:

from pymoo.algorithms.nsga2 import NSGA2
from pymoo.factory import get_sampling, get_crossover, get_mutation

algorithm = NSGA2(
    pop_size=20,
    n_offsprings=10,
    sampling=get_sampling("real_random"),
    crossover=get_crossover("real_sbx", prob=0.9, eta=15),
    mutation=get_mutation("real_pm", prob=0.01,eta=20),
    eliminate_duplicates=True
)
from pymoo.factory import get_termination

termination = get_termination("n_gen", 100)

from pymoo.optimize import minimize

res = minimize(MyProblem(),
               algorithm,
               termination,
               seed=1,
               save_history=True,
               verbose=True)
Run Code Online (Sandbox Code Playgroud)

我尝试过的(我的参考:stackoverflow问题):

import pandas as pd
df2 = pd.DataFrame …
Run Code Online (Sandbox Code Playgroud)

python optimization evolutionary-algorithm

4
推荐指数
1
解决办法
1351
查看次数

错误:必须使用有效的下标向量对列进行子集化。x 由于精度损失,无法从 &lt;double&gt; 转换为 &lt;integer&gt;

我正在处理一个包含所有数字类型变量的数据框

summary.default(pfnew)
Run Code Online (Sandbox Code Playgroud)
  • ID 6016315 - 无 - 数字
  • 迭代器 6016315 -无- 数字
  • 值 6016315 -无- 数字
  • CV 6016315 -非数字

我想创建一个按迭代器和 CV 分组的数据透视表并汇总 ID 的计数。本质上,我想要数据框中对应于一组特定迭代器和 CV 值的点数。我使用的代码是:

代码

install.packages("tidyr")
install.packages("dplyr")
install.packages("vctrs")
library(vctrs)
library(tidyr)
library(dplyr)
allow_lossy_cast(pivot<-pfnew%>%
  select(pfnew$iterator,pfnew$CV,pfnew$ID)%>%
  summarise(CT=count(pfnew$ID)))
Run Code Online (Sandbox Code Playgroud)

但正如其他论坛中所讨论的,即使在使用allow_lossy_cast之后,我也收到了相同的错误消息。

错误:必须使用有效的下标向量对列进行子集化。x 由于精度损失,无法从 转换为 。

我们该如何解决这个问题?或者我们可以用其他方式做同样的工作吗?

pivot-table r data-conversion

2
推荐指数
1
解决办法
4万
查看次数

使用“combn”和“outer”功能的组合提高运算速度

我有一个数据框 df ,其中包含两个变量,如下所示。使用下面的代码,我想获得矩阵“mat”。

此代码适用于 unique(df$V1)= 3 但对于 unique(df$V1) 为 1000 的操作需要大量时间(> 10 小时)。

数据框

V1   V2
1   60
1   30
1   38
1   46
2   29
2   35
2   13
2   82
3   100
3   72
3   63
3   45
Run Code Online (Sandbox Code Playgroud)

代码:

#Unique V1 values
vec <- unique(df$V1)
#Count <= valies
val <- combn(vec, 2, function(x) 
  sum(outer(df$V2[df$V1 == x[1]], df$V2[df$V1 == x[2]], `<=`)))
val
#[1]  5 14 13

#Create an empty matrix
mat <- matrix(0,length(vec), length(vec))
#Fill the lower triangle of …
Run Code Online (Sandbox Code Playgroud)

r combn

1
推荐指数
1
解决办法
109
查看次数