Czytam plik Excel za pomocą Pandina, który zawiera takie elementy w kolumnie "Firmy":
'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'
Mój plik df wygląda następująco:
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
Próbuję uzyskać unikalną listę firm i przejść do listy Python, więc wykonuję następujące czynności:
unique_firms = df.firms.unique()
Jednak po tym, jak i po przekształceniu do listy Python, aby sprawdzić zawartość tablicy
unique_firms.tolist()
Dostaję (częściowe wyjście):
[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 o M L i inne są powtarzane, więc mój kod nie wybiera unikalnych terminów. Czy istnieje sposób tworzenia nowej tablicy pandy lub numpy, która zawiera unikalne terminy, które są przecinkami rozdzieloną w łańcuchu?
2 odpowiedzi
Patrząc na twój przykład, widzę, że masz grupę Nanu, który musisz sobie z tym poradzić:
df = df.dropna()
Jest to bardzo ważny krok, który został pominięty w poprzednich proponowanych rozwiązaniach. Następnym krokiem jest to, co sugerowali inni użytkownicy:
df2 = pd.DataFrame(df.firms.str.split(',').tolist())
firms = df2.stack().unique().tolist()
Powinno to wytworzyć listę firm i tam pozostały inne wyjaśnienia. Jeśli sprawdzisz uważnie, na początku ciągu jest kilka spacji, więc:
' Dougherty & Co.',
Liczyłby się jako oddzielny podmiot z:
'Dougherty & Co.',
Następny krok jest konieczny, aby stworzyć unikalną listę firm, a to jest inny powód, dla którego uważam, że inne rozwiązania nie działały:
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']
Zaczynam
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, ...
To bardzo zabawne, że robię prawie tę samą praktykę na dwa pytania już dziś. Również tutaj struktura danych jest pomieszana, ponieważ masz oddzielne wpisy w tej samej kolumnie (oddzielone przecinkami). Najpierw naprawimy to:
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
Teraz możemy po prostu zrobić
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']
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.