【问题标题】:pandas split column values into separate columns熊猫将列值拆分为单独的列
【发布时间】:2019-11-05 07:10:21
【问题描述】:

这与:exploding a pandas dataframe column

这是我的数据框:

import pandas as pd
import numpy as np
d = {'id': [1, 1, 1, 2, 2, 2], 'data': [{'foo':True}, {'foo':False, 'bar':True}, {'foo':True, 'bar':False, 'baz':True}, {'foo':False}, {'foo':False, 'bar':False}, {'foo':False, 'bar':True, 'baz':False}]}
df = pd.DataFrame(data=d)
df

我想用相关的TrueFalse 值为data 列中的每个值创建一个新列。 (对于任何空值,np.nan)。

我的新数据框如下所示:

a = {'id': [1, 1, 1, 2, 2, 2], 'data': [{'foo':True}, {'foo':False, 'bar':True}, {'foo':True, 'bar':False, 'baz':True}, {'foo':False}, {'foo':False, 'bar':False}, {'foo':False, 'bar':True, 'baz':False}], 'foo':[True, False, True, False, False, False], 'bar':[np.nan, True, False, np.nan, False, True], 'baz':[np.nan, np.nan, True, np.nan, np.nan, False] }
df1 = pd.DataFrame(data=a)
df1

我不确定这是否可以通过Series.str.get_dummies 实现,因为我不确定如何映射TrueFalse 值。感谢任何帮助!

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    我正在使用from_records

    pd.DataFrame.from_records(d['data'],index=d['id'])
         bar    baz    foo
    1    NaN    NaN   True
    1   True    NaN  False
    1  False   True   True
    2    NaN    NaN  False
    2  False    NaN  False
    2   True  False  False
    

    【讨论】:

    • @cs95 终于找到了一些不同的方法,感谢编辑顺便说一句
    【解决方案2】:

    列出列以获取记录列表,然后将其转换为DataFrame:

    # pd.concat([df, pd.DataFrame(df['data'].tolist())], axis=1)
    df.join(pd.DataFrame(df['data'].tolist()))
    
       id                                       data    bar    baz    foo
    0   1                              {'foo': True}    NaN    NaN   True
    1   1                {'foo': False, 'bar': True}   True    NaN  False
    2   1   {'foo': True, 'bar': False, 'baz': True}  False   True   True
    3   2                             {'foo': False}    NaN    NaN  False
    4   2               {'foo': False, 'bar': False}  False    NaN  False
    5   2  {'foo': False, 'bar': True, 'baz': False}   True  False  False
    

    如果输出中不需要“数据”列,您可以在展开前pop它:

    df.join(pd.DataFrame(df.pop('data').tolist()))
    
       id    bar    baz    foo
    0   1    NaN    NaN   True
    1   1   True    NaN  False
    2   1  False   True   True
    3   2    NaN    NaN  False
    4   2  False    NaN  False
    5   2   True  False  False
    

    参考:Convert a list of dictionaries to pandas DataFrame

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-21
      • 2020-05-08
      • 1970-01-01
      • 2016-08-30
      • 2019-11-26
      • 2019-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多