替换pandas df中的引号以计算唯一术语

2024-06-26 17:47:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用pandas读取一个excel文件,其中每个“公司”列中都包含这样的项目:

'B Of A M L, Dougherty & Co., Goldman Sachs, Raymond James'
'Zacks Small Cap'
'Wedbush Securit'
'B Of A M L, Cowen & Company, Deutsche Bk Sec, Fbr Cap Markets, J.P. Morgan'
'Janney Mont., Jefferies & Co., Leerink Partner'

我的测向图是这样的:

^{pr2}$

我试图获得一个唯一的公司列表并传递给python列表,因此我执行以下操作:

unique_firms = df.firms.unique()

但是,在完成此操作并转换为python列表以检查数组的内容之后

unique_firms.tolist()

我得到(部分输出):

[nan,
 u'Benchmark Compa, Brean Capital, Noble Financial, Northcoast Rese',
 u'Fig Partners',
 u'Raymond James',
 u'Keefe Bruyette',
 u'Fbr Cap Markets, Fig Partners, Keefe Bruyette, Raymond James',
 u'Stifel Nicolaus, William Blair',
 u'Macquarie Capit, Morgan Stanley, William Blair',
 u'Barclays Capita, Craig-Hallum, Deutsche Bk Sec, William Blair',
 u'Co Forecst, Gabelli & Compa, Keybanc Cap Mkt, Northcoast Rese',
 u'Co Forecst',
 u'Ascendiant Cap, Zacks Small Cap',
 u'B Of A M L, Feltl & Company, Piper Jaffray, Raymond James, Stifel Nicolaus',
 u'B Of A M L, Benchmark Compa, Jefferies & Co., Morgan Stanley, Piper Jaffray, Raymond James, William Blair',
 u'Baird R W, Global Hunter S, Ladenberg Thalm, Stifel Nicolaus, Suntrust Robins, Wunderlich Res',

Bo Of A M L和其他的都是重复的,所以我的代码没有选择唯一的术语。有没有办法创建一个新的pandas或numpy数组,其中包含在字符串中以逗号分隔的唯一术语?在


Tags: ofpandas列表capuniquewilliamcojames
2条回答

我从

In[141]: df
Out[141]: 
                                               firms
0  B Of A M L, Dougherty & Co., Goldman Sachs, Ra...
1                                    Zacks Small Cap
2                                    Wedbush Securit
3  B Of A M L, Cowen & Company, Deutsche Bk Sec, ...

有趣的是,我今天对两个问题做了几乎相同的练习。同样,您的数据结构也很混乱,因为在同一列中有单独的条目(用逗号分隔)。我们首先解决这个问题:

^{pr2}$

现在我们只需

In[148]: df2.stack().unique().tolist()
Out[148]: 
['B Of A M L',
 ' Dougherty & Co.',
 ' Goldman Sachs',
 ' Raymond James',
 'Zacks Small Cap',
 'Wedbush Securit',
 ' Cowen & Company',
 ' Deutsche Bk Sec',
 ' Fbr Cap Markets',
 ' J.P. Morgan',
 'Janney Mont.',
 ' Jefferies & Co.',
 ' Leerink Partner']

通过查看您的示例,我发现您有一堆NaN,您需要首先处理这些问题:

df = df.dropna()

这是一个非常重要的步骤,在以前提出的解决办法中,这一步被省略了。下一步是其他用户的建议:

^{pr2}$

这应该会产生一份公司名单,其他解释也就到此为止了。如果仔细检查,字符串开头有一些尾随空格,因此:

' Dougherty & Co.',  

将被视为独立实体:

'Dougherty & Co.',  

下一步是创建你独特的公司列表的必要步骤,这也是我认为其他解决方案不起作用的另一个原因:

clean_list = []
for firm in firms:
    firm = firm.strip()
    if firm not in clean_list:
        clean_list.append(firm)
    clean_list.sort()

clean_list
['B Of A M L',
 'Cowen & Company',
 'Deutsche Bk Sec',
 'Dougherty & Co.',
 'Fbr Cap Markets',
 'Goldman Sachs',
 'J.P. Morgan',
 'Janney Mont.',
 'Jefferies & Co.',
 'Leerink Partner',
 'Raymond James',
 'Wedbush Securit',
 'Zacks Small Cap']

相关问题 更多 >