【问题标题】:combine multiple columns in single data frames from single dataframe从单个数据帧组合单个数据帧中的多列
【发布时间】:2019-12-22 12:48:01
【问题描述】:

我有一个数据框,它由多个列名组成,例如“Load_Node_Values,Load_KV_Values,Load_Node_Values,Load_KV_Values,Load_P_ST_Values,Load_ST_Values,G_Node_Values,G_KV_Values,G_P_ST_Values,G_ST_Values,Line_Node_Values,Line_KV_Values,Line_P_ST_Values,Line_ST_Values,T_ ,T_ST_Values,Load_P_ST_Values,Load_ST_Values,G_Node_Values G_KV_Values,G_P_ST_Values,G_ST_Values,Line_Node_Values,Line_KV_Values,Line_P_ST_Values,Line_ST_Values,T_Node_Values,T_KV_Values”。所有这些列都有数字和字符串值。我想结合所有的值 将_Node_values、G_Node_values、Line_Node_values 和 T_Node_Values 加载到一个单独的列“新名称”中,类似地,另一列以及另一个新列名称。

我使用了框架并放置了所有想要组合的列。在代码中,我展示了 frame_node、frame_KV、frame_P、frame_ST,并将所有列名放在这些框架中,如代码所示。

frame_KV=[df1['Load_KV_Values'],df2['G_KV_Values'],df3['Line_KV_Values'],df4['T_KV_Values']]
frame_P=[df1['Load_P_ST_Values'],df2['G_P_ST_Values'],df3['Line_P_ST_Values'],df4['T_P_ST_Values']]
frame_ST=[df1['Load_ST_Values'],df2['G_ST_Values'],df3['Line_ST_Values'],df4['T_ST_Values']]

frames=[frame_node,frame_KV,frame_P,frame_ST]

result_nodes=pd.concat(frames)

这是我从文本中得到的错误。 “TypeError:无法连接类型为“”的对象;只有 pd.Series、pd.DataFrame 和 pd.Panel(已弃用)obj 有效”

【问题讨论】:

    标签: python pandas dataframe merge concatenation


    【解决方案1】:

    Series的列表列表,所以将其展平为Series的列表:

    result_nodes=pd.concat([y for x in frames for y in x])
    

    或者可能需要先连接axis=1 fr eacj list 然后默认axis=0(应该省略):

    result_nodes=pd.concat(pd.concat([x for x in frames], axis=1))
    

    【讨论】:

    • frame_KV=[df1['Load_KV_Values'],df2['G_KV_Values'],df3['Line_KV_Values'],df4['T_KV_Values']] 这段代码是否适合将这些多列组合为行,因为我没有获取正确的结果
    • @anmol - 我认为是的,只需要在所有 DataFrame 中使用相同的索引值,所以在您的解决方案之前尝试df1 = df1.reset_index(drop=True)df2 = df2.reset_index(drop=True)df3 = df3.reset_index(drop=True)df4 = df4.reset_index(drop=True)
    【解决方案2】:
    frame_1=df1[['Load_KV_Values','Load_P_ST_Values','Load_ST_Values']]
    frame_2= df2[['G_P_ST_Values','G_KV_Values','G_ST_Values']]
    frame_3=df3[['Line_KV_Values','Line_ST_Values','Line_P_ST_Values']
    frame_4 = df4[['T_KV_Values','T_P_ST_Values','T_ST_Values']
    result_nodes = pd.concat([frame_1, frame_2, frame_3, frame_4], axis =1)
    

    请通过以下方法检查并验证所有四个数据帧是否具有相同的行数。 --点赞

    【讨论】:

    • 不,这些数据帧的行数不同。它显示与以前相同的结果。我需要将同一列中的所有节点值组合在一起,同样,同一列中的所有 KV 值和 ST 值
    • 如果您在所有数据框中没有相同数量的行,那么您不能合并(连接)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2020-06-13
    • 2016-10-28
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多