一列列表的Pandas get_dummies,其中单元格在该列中可能没有值



我在数据帧中有一列,其中所有值都是列表(通常每行一项的列表(。因此,我想使用get_dummies对所有值进行一次热编码。但是,可能有几行没有列的值。我最初看到它是一个nan,然后我用一个空列表替换了这个nan,但在任何一种情况下,我都看不到get_dummies的结果为0和1,而是每个生成的列都是空的(我希望每个生成列都是0(。

如何让get_dummies处理空列表?

# create column from dict where value will be a list
X['sponsor_list'] = X['bill_id'].map(sponsor_non_plaw_dict)
# line to replace nan in sponsor_list column with empty list
X.loc[X['sponsor_list'].isnull(),['sponsor_list']] =    X.loc[X['sponsor_list'].isnull(),'sponsor_list'].apply(lambda x: [])
# use of get_dummies to encode the sponsor_list column
X = pd.concat([X, pd.get_dummies(X.sponsor_list.apply(pd.Series).stack()).sum(level=0)], axis=1)

示例:

111th-congress_senate-bill_3695.txt False ['Menendez,_Robert_[D-NJ].txt']
112th-congress_house-bill_3630.txt False []
111th-congress_senate-bill_852.txt False ['Vitter,_David_[R-LA].txt']
114th-congress_senate-bill_2832.txt False
['Isakson,_Johnny_[R-GA].txt']
107th-congress_senate-bill_535.txt False ['Bingaman,_Jeff_[D-NM].txt']

我想对第三列进行一次热编码。第二行中的特定数据项没有人将其与它们关联,所以我需要用所有0对该行进行编码。我需要第三列作为列表的原因是,我还需要对相关列执行此操作,其中我需要具有[0,n]值,其中n可以是5、10甚至20。

X['sponsor_list'] = X['bill_id'].map(sponsor_non_plaw_dict)
X.loc[X['sponsor_list'].isnull(),['sponsor_list']] = X.loc[X['sponsor_list'].isnull(),'sponsor_list'].apply(lambda x: [])
mlb = MultiLabelBinarizer()
X = X.join(pd.DataFrame(mlb.fit_transform(X.pop('sponsor_list')),
columns=mlb.classes_,
index=X.index))

我使用MultiLabelBinarizer来捕捉我想要做的事情。在应用之前,我仍然用空列表替换nan,但后来我fit_transform创建了0/1值,这可能导致一行中没有1,或者一行中有很多1。

最新更新