我正在尝试根据其他列中的值创建新的功能列。因此,我有一列带有注释的列,如果它们包含url地址,我想将1输出到新列,否则输出0,因此这将是二进制功能。
Text Contains_Url
Buy round lot on the open MT @WSJD #AAPL 1
stock briefly dove 6.4% today. Analysts
not sure why https://blogs.wsj.com/moneybeat/
2014/12/01/apple-crash-catches-wall-street-off-guard/
@apple Contact sync between Yosemite and iOS8 is 0
seriously screwed up. It used to be much more stable
in the past. #icloud #isync
所以会有像这样的行,我想在数据框中基于文本列使用1或0创建一个新列(如果有或没有URL)。只是为了检查带有url的推文数量与其余数据集相比,我做了
data.shape
(3804, 12)
data[data.text.str.contains("http")].shape
(2130, 12)
因此,它可以准确显示具有url的行数。我的想法是创建一个可以执行此操作的函数,然后使用lambda进行应用
def contains_url(row):
if data[data.text.str.contains("http")]:
return 1
else:
return 0
data['contains_url'] = data.apply (lambda row: contains_url(row),axis=1)
ValueError: ('The truth value of a DataFrame is ambiguous. Use a.empty,
a.bool(), a.item(), a.any() or a.all().', 'occurred at index 0')
但是这样做是在上面给我这个错误。任何帮助,将不胜感激。谢谢!
答案 0 :(得分:1)
我认为您可以在没有apply
的情况下更有效地执行此操作,只需使用str.contains('http')
产生的布尔值并将其强制转换为int
:
data['contains_url'] = data['Text'].str.contains('http').astype(int)