【问题标题】:Python: Naming of columns and merging two data frames into onePython:列命名并将两个数据框合并为一个
【发布时间】:2022-06-20 04:52:59
【问题描述】:

我想给出我的示例数据列名称。我希望这些列以目标函数及其决策变量命名,如下所示:f_1、f_2、h、b、l、t

样本数据:

sampler = qmc.LatinHypercube(d=4)

u_bounds = np.array([5.0, 5.0, 10.0, 10.0])
l_bounds = np.array([0.125, 0.125, 0.1, 0.1])
data = sampler.lhs_method(100)*(u_bounds-(l_bounds)) + (l_bounds)

列名来自哪里的优化问题:

def objectives (h,b,l,t):
    f1 = 1.10471*(h**2)*l + 0.04811*t*b*(14.0 + l)
    f2 = 2.1952 / (t**3)*b
    return f1,f2

为目标函数塑造数据:

y=np.zeros((100,2))   
for i in range(np.shape(data)[0]):
    y[i,0], y[i,1] = objectives(data[i,0], data[i,1], data[i,2], data[i,3])

我尝试了什么:

df = pd.DataFrame(data=data)
df.columns = ["h", "b", "l", "t"]

df.head()

frames = [df, y,]

result = pd.concat(frames)

这个错误是这样的:TypeError: cannot concatenate object of type '<class 'numpy.ndarray'>'; only Series and DataFrame objs are valid

那么对于这个问题,你会推荐什么样的修改呢?现在看来,这两个数据框的当前形式不兼容。

【问题讨论】:

    标签: python pandas dataframe optimization


    【解决方案1】:

    如果您希望它们“并排”,您可以执行以下操作:

    df = pd.DataFrame(data=data)
    df.columns = ["h", "b", "l", "t"]
    
    # Adding new columns from variable y
    df['f1'] = y[:,0]
    df['f2'] = y[:,1]
    
    # Quick check
    df.head()
    

    DataFrames 表示表格数据。您可以将它们视为一个列列表,其中每列都有一个名称(f1、f2、h、b...),并且可以通过my_dataframe['column_name'] 访问/修改。

    【讨论】:

      【解决方案2】:

      就像错误所说的那样,你不能 concat 一个带有 numpy 数组的数据框。

      所以你应该将 y(numpy 数组)转换为 df 以与另一个 df 连接:

      y = np.zeros((2,2)) 
      y = pd.DataFrame(y) #this
      
      pd.concat([df, y])
      

      重现错误:

      解决:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-20
        • 2021-05-17
        • 1970-01-01
        • 1970-01-01
        • 2019-07-26
        • 1970-01-01
        • 1970-01-01
        • 2021-02-23
        相关资源
        最近更新 更多