сокращение столбца списков CSV до единого списка - PullRequest
0 голосов
/ 27 ноября 2018

Я использую Python3 для чтения столбца из электронной таблицы 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

Я хочу уменьшить col2 до единого списка слов в col2 (например, egg, bacon, ...).

df.col2.ravel(), кажется, сокращает col2 до списка строк.

df.col2.flatten() приводит к

AttributeError: 'Series' object has no attribute 'flatten' 

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Если вы хотите, чтобы в качестве столбца col2 был указан ряд списка, это поможет:

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)

Результат:

                   col1                   col2
0         starts normal           [egg, bacon]
1  still none the wiser  [egg, sausage, bacon]
0 голосов
/ 28 ноября 2018

Может быть, это то, что вам нужно:

  1. Превратить ряд разделенных запятыми строк в список списков

    arrs = df.col2.map(lambda x: [i.strip() for i in x.split(',')]).tolist()
    # [['egg', 'bacon'], ['egg', 'sausage', 'bacon'], ...]
    
  2. Получить списокс уникальными предметами

    unique = list({elem for arr in arrs for elem in arr})
    # ['spam', 'sausage', 'egg', 'bacon']
    
0 голосов
/ 27 ноября 2018

Попробуйте что-нибудь простое, например:

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