【问题标题】:How to append all rows of all columns of a dataframe below the last row of first column如何在第一列的最后一行下方附加数据框所有列的所有行
【发布时间】:2022-11-10 10:37:33
【问题描述】:

我有这样的数据框:

        0                            1                       2                       3
{'id':10:'name':'Paul'}     {'id':10:'age':33}        {'id':10:'name':'Paul'} {'id':10:'name':'Paul'} 
{'id':10:'name':'Paul'}     {'id':10:'age':'Paul'}    {'id':10:'name':'Paul'} {'id':10:'name':'Paul'}
{'id':10:'name':'Paul'}     {'id':10:'name':'Paul'}   {'id':10:'name':'Paul'} {'id':10:'name':'Paul'}
{'id':10:'name':'Paul'}     {'id':10:'name':'Paul'}   {'id':10:'name':'Paul'} None

所以,在这个例子中,我有 4 列 4 行。碰巧我的数据框有 500 行和 7 列,大约有 3500 条记录(第 7 列有一些 none

所有列中的所有行都是 dict 类型,即使它们可以不同也可以不同

我需要的:如何将此数据框转换为只有 1 列,方法是将第 1 列的所有行放在第 0 列的最后一行下方,依此类推,直到最后一列的所有行都放在第 0 列的最后一行下方?

预期结果:

         0
{'id':10:'name':'Paul'}             
{'id':10:'name':'Paul'}         
{'id':10:'name':'Paul'}      
{'id':10:'name':'Paul'}     
{'id':10:'age':33} 
{'id':10:'name':'Paul'}
{'id':10:'name':'Paul'}
{'id':10:'name':'Paul'}
{'id':10:'name':'Paul'}
{'id':10:'name':'Paul'}
more rows
None

【问题讨论】:

    标签: pandas


    【解决方案1】:

    你可以melt,只保留值列:

    df.melt(value_name=0)[[0]]
    

    输出:

                              0
    0   {'id':10:'name':'Paul'}
    1   {'id':10:'name':'Paul'}
    2   {'id':10:'name':'Paul'}
    3   {'id':10:'name':'Paul'}
    4        {'id':10:'age':33}
    5    {'id':10:'age':'Paul'}
    6   {'id':10:'name':'Paul'}
    7   {'id':10:'name':'Paul'}
    8   {'id':10:'name':'Paul'}
    9   {'id':10:'name':'Paul'}
    10  {'id':10:'name':'Paul'}
    11  {'id':10:'name':'Paul'}
    12  {'id':10:'name':'Paul'}
    13  {'id':10:'name':'Paul'}
    14  {'id':10:'name':'Paul'}
    15                     None
    

    【讨论】:

    • 工作!但给了我这个警告:FutureWarning: This dataframe has a column name that matches the 'value_name' column name of the resulting Dataframe. In the future this will raise an error, please set the 'value_name' parameter of DataFrame.melt to a unique name.
    • 你有哪个熊猫版本?这不适用于最新的 1.4.2,它不应该是一个问题,因为这里使用了所有列;)
    • 我明白了,我有'0'(字符串)作为列名,您可以使用df.melt()[['value']].rename(columns={'value': df.columns[0]}) 来避免警告。奇怪的是,在熔体中使用同名的列时会发出警告(如果不是正常的)。
    【解决方案2】:
    ss11=pd.Series()
    def function1(ss:pd.Series):
        global ss11
        ss11=pd.concat([ss11,ss])
    df1.apply(function1)
    ss11.pipe(print)
    
    0    {'id':10:'name':'Paul'}
    1    {'id':10:'name':'Paul'}
    2    {'id':10:'name':'Paul'}
    3    {'id':10:'name':'Paul'}
    0         {'id':10:'age':33}
    1     {'id':10:'age':'Paul'}
    2    {'id':10:'name':'Paul'}
    3    {'id':10:'name':'Paul'}
    0    {'id':10:'name':'Paul'}
    1    {'id':10:'name':'Paul'}
    2    {'id':10:'name':'Paul'}
    3    {'id':10:'name':'Paul'}
    0    {'id':10:'name':'Paul'}
    1    {'id':10:'name':'Paul'}
    2    {'id':10:'name':'Paul'}
    3                       None
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-12
      • 2019-10-27
      • 1970-01-01
      相关资源
      最近更新 更多