Python 替换表中的引号以计算唯一术语

Python 替换表中的引号以计算唯一术语,python,numpy,pandas,Python,Numpy,Pandas,我正在使用pandas读取一个excel文件,每个“公司”列中都包含如下项目: 我的df看起来像这样: firms 0 NaN 1 NaN 2 NaN 3 Benchmark Compa, Brean Capital, Noble Financia... 4 Fig Partners 5 Raymond James 6 Keefe Bruyette 7 Fbr Cap Markets, Fig Partners, Keefe Bruyette,... 8

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

我的df看起来像这样:

    firms
0   NaN
1   NaN
2   NaN
3   Benchmark Compa, Brean Capital, Noble Financia...
4   Fig Partners
5   Raymond James
6   Keefe Bruyette
7   Fbr Cap Markets, Fig Partners, Keefe Bruyette,...
8   Stifel Nicolaus, William Blair
9   NaN
我试图获得一个独特的公司列表并传递给python列表,因此我执行以下操作:

unique_firms = df.firms.unique()
但是,在完成此操作并转换为python列表以检查数组的内容之后

unique_firms.tolist()
我得到(部分输出):

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

我从

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

In[144]: df2 = pd.DataFrame(df.firms.str.split(',').tolist())
In[145]: df2
Out[145]: 
                 0                 1                 2                 3  \
0       B Of A M L   Dougherty & Co.     Goldman Sachs     Raymond James   
1  Zacks Small Cap              None              None              None   
2  Wedbush Securit              None              None              None   
3       B Of A M L   Cowen & Company   Deutsche Bk Sec   Fbr Cap Markets   
4     Janney Mont.   Jefferies & Co.   Leerink Partner              None   

              4  
0          None  
1          None  
2          None  
3   J.P. Morgan  
4          None 
现在我们可以简单地做了

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']
我从

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

In[144]: df2 = pd.DataFrame(df.firms.str.split(',').tolist())
In[145]: df2
Out[145]: 
                 0                 1                 2                 3  \
0       B Of A M L   Dougherty & Co.     Goldman Sachs     Raymond James   
1  Zacks Small Cap              None              None              None   
2  Wedbush Securit              None              None              None   
3       B Of A M L   Cowen & Company   Deutsche Bk Sec   Fbr Cap Markets   
4     Janney Mont.   Jefferies & Co.   Leerink Partner              None   

              4  
0          None  
1          None  
2          None  
3   J.P. Morgan  
4          None 
现在我们可以简单地做了

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']
我从

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

In[144]: df2 = pd.DataFrame(df.firms.str.split(',').tolist())
In[145]: df2
Out[145]: 
                 0                 1                 2                 3  \
0       B Of A M L   Dougherty & Co.     Goldman Sachs     Raymond James   
1  Zacks Small Cap              None              None              None   
2  Wedbush Securit              None              None              None   
3       B Of A M L   Cowen & Company   Deutsche Bk Sec   Fbr Cap Markets   
4     Janney Mont.   Jefferies & Co.   Leerink Partner              None   

              4  
0          None  
1          None  
2          None  
3   J.P. Morgan  
4          None 
现在我们可以简单地做了

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']
我从

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

In[144]: df2 = pd.DataFrame(df.firms.str.split(',').tolist())
In[145]: df2
Out[145]: 
                 0                 1                 2                 3  \
0       B Of A M L   Dougherty & Co.     Goldman Sachs     Raymond James   
1  Zacks Small Cap              None              None              None   
2  Wedbush Securit              None              None              None   
3       B Of A M L   Cowen & Company   Deutsche Bk Sec   Fbr Cap Markets   
4     Janney Mont.   Jefferies & Co.   Leerink Partner              None   

              4  
0          None  
1          None  
2          None  
3   J.P. Morgan  
4          None 
现在我们可以简单地做了

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,您需要首先处理这些NaN:

df = df.dropna()
这是一个非常重要的步骤,在先前提出的解决方案中省略了这一步骤。下一步是其他用户的建议:

df2 = pd.DataFrame(df.firms.str.split(',').tolist())
firms = df2.stack().unique().tolist()
这应该会产生一份公司名单,这就是其他解释停止的地方。如果仔细检查,字符串开头会有一些尾随空格,因此:

' 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']

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

df = df.dropna()
这是一个非常重要的步骤,在先前提出的解决方案中省略了这一步骤。下一步是其他用户的建议:

df2 = pd.DataFrame(df.firms.str.split(',').tolist())
firms = df2.stack().unique().tolist()
这应该会产生一份公司名单,这就是其他解释停止的地方。如果仔细检查,字符串开头会有一些尾随空格,因此:

' 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']

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

df = df.dropna()
这是一个非常重要的步骤,在先前提出的解决方案中省略了这一步骤。下一步是其他用户的建议:

df2 = pd.DataFrame(df.firms.str.split(',').tolist())
firms = df2.stack().unique().tolist()
这应该会产生一份公司名单,这就是其他解释停止的地方。如果仔细检查,字符串开头会有一些尾随空格,因此:

' 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']

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

df = df.dropna()
这是一个非常重要的步骤,在先前提出的解决方案中省略了这一步骤。下一步是其他用户的建议:

df2 = pd.DataFrame(df.firms.str.split(',').tolist())
firms = df2.stack().unique().tolist()
这应该会产生一份公司名单,这就是其他解释停止的地方。如果仔细检查,字符串开头会有一些尾随空格,因此:

' 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']

@LMNYC,您开始使用的数据帧可能与FooBar在此处放置的数据帧不完全匹配-如果您创建的
df2
看起来与此处显示的一样,我可以确认第二部分工作正常。@LMNYC,您开始使用的数据帧可能与FooBar在此处放置的数据帧不完全匹配-如果您创建的
df2
与此处显示的数据帧一样,我可以确认第二部分工作正常。@LMNYC,您开始使用的数据帧可能与FooBar在此处放置的数据帧不完全匹配-如果您创建的
df2
与此处显示的数据帧一样,我可以确认第二部分工作正常。@LMNYC,您开始使用的数据帧可能与FooBar放在此处的内容不完全匹配-如果您创建的
df2
看起来与此处所示的一样,我可以确认第二部分工作正常。