reduzindo uma coluna de listas CSV para uma única lista

votos
0

Estou usando Python3 para ler uma coluna de uma planilha do Excel:

import pandas as pd
from pandas import ExcelFile
df = pd.read_excel('MWE.xlsx', sheet_name='Sheet1')
print(df)

                   col1                        col2
0         starts normal                  egg, bacon
1  still none the wiser         egg, sausage, bacon
2      maybe odd tastes                   egg, spam
3     or maybe post-war            egg, bacon, spam
4  maybe for the hungry   egg, bacon, sausage, spam
5                 bingo  spam, bacon, sausage, spam

Eu quero reduzir col2a uma única lista de palavras em col2 (por exemplo, ovo, bacon, ...).

df.col2.ravel()parece reduzir col2a uma lista de strings.

df.col2.flatten() rendimentos

AttributeError: 'Series' object has no attribute 'flatten' 
Publicado 27/11/2018 em 18:07
fonte usuário
Em outras línguas...                            


3 respostas

votos
2

Se o que você quer é ter uma série de lista como o col2, isso vai fazer o truque:

df = pd.DataFrame({'col1': ['starts normal','still none the wiser'], 'col2': ['egg, bacon','egg, sausage, bacon']})

df['col2'] = df['col2'].map(lambda x: [i.strip() for i in x.split(',')])
print(df)

Resultado:

                   col1                   col2
0         starts normal           [egg, bacon]
1  still none the wiser  [egg, sausage, bacon]
Respondeu 27/11/2018 em 19:07
fonte usuário

votos
1

Talvez este é o que você precisa:

  1. Vire série de vírgula cordas separadas em uma lista de listas

    arrs = df.col2.map(lambda x: [i.strip() for i in x.split(',')]).tolist()
    # [['egg', 'bacon'], ['egg', 'sausage', 'bacon'], ...]
    
  2. Obter lista com itens exclusivos

    unique = list({elem for arr in arrs for elem in arr})
    # ['spam', 'sausage', 'egg', 'bacon']
    
Respondeu 27/11/2018 em 23:48
fonte usuário

votos
1

Tente algo simples como:

df = pd.DataFrame({'col2': [list('abc'), list('de'), list('fghi')]})
flat_col2 = [element for row in df.col2 for element in row]
# ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
Respondeu 27/11/2018 em 18:54
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more