【问题标题】:Filling a dataframe from a dictionary keys and values: efficient way从字典键和值填充数据框:有效的方法
【发布时间】:2020-04-03 13:11:33
【问题描述】:

我以以下数据框为例。

df_test = pd.DataFrame(data=0, index=["green","yellow","red"], columns=["bear","dog","cat"])

我有以下字典,其中的键和值与我的数据框的索引和列相同或相关。

d = {"green":["bear","dog"], "yellow":["bear"], "red":["bear"]}

我根据提供的键和值填充了我的数据框,使用:

for k, v in d.items():
    for x in v:
        df_test.loc[k, x] = 1

我的问题是我正在使用的数据框和字典非常大,计算时间太长。有没有更有效的方法来做到这一点?也许迭代数据框中的行而不是字典中的键和值?

【问题讨论】:

    标签: python python-3.x pandas dataframe dictionary


    【解决方案1】:

    因为性能很重要,所以使用MultiLabelBinarizer

    d = {"green":["bear","dog"], "yellow":["bear"], "red":["bear"]}
    
    from sklearn.preprocessing import MultiLabelBinarizer
    
    mlb = MultiLabelBinarizer()
    df = pd.DataFrame(mlb.fit_transform(list(d.values())),
                      columns=mlb.classes_,
                      index=list(d.keys()))
    print (df)
            bear  dog
    green      1    1
    yellow     1    0
    red        1    0
    

    然后通过DataFrame.reindex添加缺失的列和索引标签:

    df_test = df.reindex(columns=df_test.columns, index=df_test.index, fill_value=0)
    print (df_test)
            bear  dog  cat
    green      1    1    0
    yellow     1    0    0
    red        1    0    0
    

    【讨论】:

      【解决方案2】:

      使用get_dummies()

      # convert dict to a Series
      s = pd.Series(d)
      # explode your list into columns and get dummies
      df = pd.get_dummies(s.apply(pd.Series), prefix='', prefix_sep='')
      
                bear    dog
      green        1      1
      yellow       1      0
      red          1      0
      

      更新

      # convert dict to a Series
      s = pd.Series(d)
      
      # create a new data frame
      df = pd.DataFrame(s.values.tolist(), index=s.index)
      
      # get_dummies
      new_df = pd.get_dummies(df, prefix='', prefix_sep='')
      

      【讨论】:

      • 我不知道为什么,但是使用您的代码,我的数据框的列数比以前多得多
      猜你喜欢
      • 2019-03-20
      • 1970-01-01
      • 2011-04-19
      • 2020-11-23
      • 2022-01-24
      • 2019-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多