Python:将elem转换为list

时间:2016-11-03 09:31:08

标签: python list pandas

我有数据框

category    dictionary
Аксессуары для телефонов (чехлы и т.д.) [u'pad', u'me', u'\u0437', u'mi', u'samsung', u'\u0447\u0435\u0445\u043e\u043b', u'galaxy', u'\u0444\u0438\u0440\u043c\u0435\u043d\u043d\u044b\u0439', u'se', u'huawei', u'lenovo', u'\u0447\u0435\u0440\u043d\u044b\u0439', u'iphone', u'lg', u'tab', u'sony', u'pro', u'flip', u'acer', u'ip', u'\u043a\u043e\u0436\u0438', u'htc', u'apple', u'\u0447\u0435\u0445\u043b\u044b', u'xperia', u'\u043a\u043e\u0436\u0430', u'samsung-galaxy-', u'zte', u'asus', u'ice', u'\u043a\u043e\u0436\u0430\u043d\u044b\u0439', u'\u0438\u043c\u043f\u043e\u0440\u0442\u043d\u043e\u0439', u'\u043a\u043d\u0438\u0436\u043a\u0430', u'\u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439', u'\u0447\u0435\u0445\u043e\u043b-\u043a\u043d\u0438\u0436\u043a\u0430', u'\u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043a\u043e\u0439', u'\u0444\u043b\u0438\u043f', u'\u0447\u0435\u0445\u043e\u043b-\u0444\u043b\u0438\u043f', u'le', u'"\u0447\u0435\u0445\u043b\u044b']
Монобрендовые страницы с информацией    [u'iphone', u'apple', u'mac', u'os', u'xperia', u'ipad', u'ios', u'pro', u'macos', u'mi', u'miui', u'sony', u'macbook', u'galaxy', u'alcatel', u'lenovo', u'\u0432\u043e', u'app', u'\u043f\u0440\u043e', u'samsung', u'lenovo-', u'watch', u'store', u'itunes', u'plus', u'\u0440\u0435\u043c\u043e\u043d\u0442', u'vs', u'compact', u'""', u'####', u'sierra', u'touch', u'air', u'"\u0437\u0430\u043f\u0438\u0441\u0438', u'"mi', u'"miui', u'note', u'"\u043a\u0430\u043a', u'pixi', u'idol']
Официальные магазины определенных марок [u'mi', u'xiaomi', u'pro', u'redmi', u'philips', u'note', u'apple', u'\u043e\u0441', u'samsung', u'store', u'\u0432\u043e', u'mi4', u'iphone', u'yi', u'\u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d', u'mac', u'galaxy', u'\u043a\u0443\u043f\u0438\u0442\u044c', u'\u0438\u043c', u'\u043c\u0430\u0433\u0430\u0437\u0438\u043d', u'\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e', u'\u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0430', u'32gb', u'mi5', u'63apple', u'se', u'highscreen', u'smart', u'app', u'\u0433\u0431', u'\u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430', u'\u0440\u0443\u0431', u'####', u'nillkin', u'16gb', u'\u0437\u0430\u0431\u0440\u0430\u0442\u044c', u'\u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0435', u'\u0431\u043e\u043b\u044c\u0448\u0435', u'\u043d\u0430\u043b\u0438\u0447\u0438\u0438', u'tv']
 СМИ    [u'02', u'\u043e\u0431\u0437\u043e\u0440', u'google', u'\u044f\u043d\u0434\u0435\u043a\u0441', u'\u043d\u043e\u044f\u0431\u0440\u044c', u'apple', u'\u0447\u0435\u043c', u'microsoft', u'\u044f\u043d\u0434\u0435\u043a\u0441\u0443', u'\u0433\u043e\u0434\u0430', u'\u043f\u043e\u0441\u043b\u0435', u'\u0443\u0436\u0435', u'voyager', u'windows', u'\u0441\u0430\u0439\u0442\u0435', u'plantronics', u'\u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0445', u'\u0440\u0443\u0431\u043b\u0435\u0439', u'\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c', u'\u0441\u0438\u0441\u0442\u0435\u043c\u0435', u'\u0441\u0442\u0430\u043b\u043e', u'\u0440\u0430\u0437\u0433\u043e\u043d\u0438\u0442\u0441\u044f', u'\u0440\u043e\u0431\u043e\u043c\u043e\u0431\u0438\u043b\u0438', u'"\u0432\u0438\u0434\u044f\u0449\u0438\u0439"', u'\u043f\u0440\u043e\u0434\u0430\u0436\u0443', u'\u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b', u'\u043f\u043e\u043c\u043e\u0433\u0443\u0442', u'\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f', u'"\u0438\u0433\u0440\u043e\u0432\u0443\u044e', u'\u043c\u0430\u0433\u043d\u0438\u0442\u043d\u043e\u0439', u'\u0436\u0430\u0440-\u043f\u0442\u0438\u0446\u0430', u'\u0432\u043f\u0435\u0440\u0432\u044b\u0435', u'bluetooth-\u0433\u0430\u0440\u043d\u0438\u0442\u0443\u0440\u044b', u'"\u044f\u043d\u0434\u0435\u043a\u0441\u0443"', u'\u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430']
Телеком-провайдеры  [u'\u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442', u'\u0442\u0432', u'\u0431\u0438\u043b\u0430\u0439\u043d', u'####', u'\u0433\u0431', u'\u0443\u0441\u043b\u0443\u0433\u0438', u'tele2', u'\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439', u'\u043d\u043e\u043c\u0435\u0440', u'\u0442\u0440\u0430\u0444\u0438\u043a', u'\u0441\u0432\u044f\u0437\u044c', u'\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430', u'\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b', u'\u0437\u0430\u043a\u0440\u044b\u0442\u044c', u'\u0434\u043e\u043c\u0430', u'\u043c\u0431', u'\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u0430\u044f', u'\xab\u0431\u0438\u043b\u0430\u0439\u043d\xbb', u'\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f', u'****', u'\u043c\u0435\u0441\u044f\u0446', u'\u043e\u0434\u043d\u043e', u'\u0441\u043a\u043e\u043b\u044c\u043a\u043e', u'\u0441\u0447\u0435\u0442', u'\u0442\u0440\u0430\u0444\u0438\u043a\u0430', u'\u043e\u0444\u0438\u0441\u044b', u'\u043f\u043b\u0430\u0442\u0435\u0436', u'\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435', u'\u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435', u'\u043a\u0431', u'#####', u'\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439', u'\u043a\u0430\u0440\u0442\u0435', u'\u043c\u043e\u0441\u043a\u0432\u0430', u'\u0441\u0430\u0439\u0442\u0430', u'\u0440\u0435\u0433\u0438\u043e\u043d', u'\u043d\u043e\u043c\u0435\u0440\u0430', u'\u043d\u0443\u0436\u0435\u043d', u'\u0437\u0430\u043a\u0430\u0437\u0430', u'\u043d\u043e\u043c\u0435\u0440\u043e\u0432']
запчасти и ремонт   [u'\u0440', u'ya', u'iphone', u'apple', u'sony', u'samsung', u'samara', u'ipad', u'windows', u'\u0442\u0435\u043b\u0435\u0444\u043e\u043d', u'microsoft', u'\u043e\u0441', u'phone', u'info', u'\u043a\u0443\u043f\u0438\u0442\u044c', u'android', u'\u043f\u0440\u043e', u'store', u'clean', u'ccleaner', u'business', u'\u0437\u0430\u043f\u0447\u0430\u0441\u0442\u0438', u'asus', u'\u0440\u0435\u043c\u043e\u043d\u0442', u'support', u'usb', u'\u0442\u0430\u0447\u0441\u043a\u0440\u0438\u043d', u'\u043a\u0430\u0431\u0435\u043b\u044c', u'mobile', u'\u0434\u0438\u0441\u043f\u043b\u0435\u0439', u'galaxy', u'--', u'4s', u'pro', u'over', u'\u0447\u0435\u0440\u043d\u044b\u0439', u'6s', u'device', u'\u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435', u'imei']
интернет-агрегатор (market.yandex.ru, price.ru, etc.) - не работает какмагазин, но пересылает на сайты магазинов    [u'shopotam', u'onliner', u'shop', u'shopozz', u'galaxy', u'le', u'\u043a\u043e', u'ki', u'samsung', u'\u0442\u0435', u'mi', u'kimovil', u'\u0432\u043e', u'\u0442\u043e\u0432\u0430\u0440', u'phone', u'smart', u's4', u'smartphones', u'pro', u'amazon', u'\u0442\u0432', u'price', u'best', u'buy', u'gb', u'max', u'\u043a\u043b\u0438\u0435\u043d\u0442', u'compare', u'core', u'xiaomi', u'\u0442\u043e\u0432\u0430\u0440\u044b', u'note', u'de', u'2gb', u'\u043d\u0430\u0437\u0430\u0434', u'\u0430\u0432\u0442\u043e', u'iphone', u'freakscore', u'ebay', u'\u0442\u043e\u043c']

我需要从列表中打印元素。 但是当我尝试用

打印它时
for category, words in zip(df.category.values.tolist(),    df.dictionary.values.tolist()):
    for word in words:
         print word

它返回像这样的每个元素

[
u
'
p
a
d
'
,

u
'

我检查了它的类型并返回unicode。 如何从这些列表中打印elem?

2 个答案:

答案 0 :(得分:1)

使用itertools.chain()中的answer加快解决方案:

from  itertools import chain

df = pd.DataFrame({'category':['a','d','f','g'],
                    'dictionary':[['af','dg','ff'],['gg','hy','jj'],
                                  ['kg','hl','gu'], ['he','jr']]})

print (df)   
  category    dictionary
0        a  [af, dg, ff]
1        d  [gg, hy, jj]
2        f  [kg, hl, gu]
3        g      [he, jr]

L = list(chain.from_iterable(df.dictionary))
print (L)
['af', 'dg', 'ff', 'gg', 'hy', 'jj', 'kg', 'hl', 'gu', 'he', 'jr']

for x in L:
    print (x)
af
dg
ff
gg
hy
jj
kg
hl
gu
he
jr

<强>计时

In [94]: %timeit (list(chain.from_iterable(df.dictionary)))
The slowest run took 4.92 times longer than the fastest. This could mean that an intermediate result is being cached.
10000 loops, best of 3: 17.2 µs per loop

In [95]: %timeit (df.dictionary.apply(pd.Series).stack().tolist())
1000 loops, best of 3: 1.5 ms per loop

编辑:

似乎您的list似乎只是列表,但它是字符串。

将此字符串转换为列表的一个可行解决方案是ast

import pandas as pd
import ast
from  itertools import chain

df = pd.read_excel('WORDS.xlsx')

df.dictionary = df.dictionary.apply(ast.literal_eval)
print (df) 
                                             category  \
0             Аксессуары для телефонов (чехлы и т.д.)   
1                Монобрендовые страницы с информацией   
2             Официальные магазины определенных марок   
3                                                 СМИ   
4                                  Телеком-провайдеры   
5                                   запчасти и ремонт   
6   интернет-агрегатор (market.yandex.ru, price.ru...   
7                                    интернет-магазин   
8   информационный ресурс: нельзя ничего купить, е...   
9                             не подходит по тематике   
10                       ошибка при открытии страницы   
11              поисковая машина: yandex, google, etc   
12                                 сайты по перекупке   
13         сайты производителей с возможностью купить   
14                    сайты производителей смартфонов   
15                                            соцсеть   

                                           dictionary  
0   [pad, me, з, mi, samsung, чехол, galaxy, фирме...  
1   [iphone, apple, mac, os, xperia, ipad, ios, pr...  
2   [mi, xiaomi, pro, redmi, philips, note, apple,...  
3   [02, обзор, google, яндекс, ноябрь, apple, чем...  
4   [интернет, тв, билайн, ####, гб, услуги, tele2...  
5   [р, ya, iphone, apple, sony, samsung, samara, ...  
6   [shopotam, onliner, shop, shopozz, galaxy, le,...  
7   [id, т, po, aliexpress, цен, те, л, aport, мо,...  
8   [н, е, android, apple, во, app, pro, forum, ph...  
9   [р, т, е, во, н, м, л, de, д, п, ко, г, те, б,...  
10  [org, 01, open, ne, 02, ma, lightspeed, •, ноя...  
11  [class, icon, yahoo, link, mozilla, me, firefo...  
12  [купить, москве", pro, olx, de, з, avito, "", ...  
13  [microsoft, windows, device, mp, devices, sim,...  
14  [microsoft, philips, cu, mi, hd, rx, ms, tv, v...  
15  [me, livejournal, п, ru, д, нравится, во, чита... 
print (list(chain.from_iterable(df.dictionary)))
['pad', 'me', 'з', 'mi', 'samsung', 'чехол', 'galaxy', 
'фирменный', 'se', 'huawei', 'lenovo', 'черный', 'iphone', 
'lg', 'tab', 'sony', 'pro', 'flip', 'acer', 'ip', 'кожи',
 'htc', 'apple', 'чехлы', 'xperia', 'кожа', 'samsung-galaxy-', 
 'zte', 'asus', 'ice', 'кожаный', 'импортной',...

答案 1 :(得分:0)

您可以先将您的列表转换为pd.Series,然后将stack转换为

In [98]: df.dictionary.apply(pd.Series).stack()
Out[98]:
0  0                                                        u'pad'
   1                                                         u'me'
   2                                                     u'\u0437'
   3                                                         u'mi'
   4                                                    u'samsung'
   5                             u'\u0447\u0435\u0445\u043e\u043b'
   6                                                     u'galaxy'
   7     u'\u0444\u0438\u0440\u043c\u0435\u043d\u043d\u044b\u0439'
   8                                                         u'se'
   9                                                     u'huawei'
   10                                                    u'lenovo'
   11                      u'\u0447\u0435\u0440\u043d\u044b\u0439'
   12                                                    u'iphone'
   13                                                        u'lg'
   14                                                       u'tab'
   15                                                      u'sony'
   16                                                       u'pro'
   17                                                      u'flip'
   18                                                      u'acer'
   19                                                        u'ip'
   20                                  u'\u043a\u043e\u0436\u0438'
   21                                                       u'htc'
   22                                                     u'apple'
   23                            u'\u0447\u0435\u0445\u043b\u044b'
   24                                                    u'xperia'
                                   ...
6  15                                                     u'smart'
   16                                                        u's4'
   17                                               u'smartphones'
   18                                                       u'pro'
   19                                                    u'amazon'
   20                                              u'\u0442\u0432'
   21                                                     u'price'
   22                                                      u'best'
   23                                                       u'buy'
   24                                                        u'gb'
   25                                                       u'max'
   26                      u'\u043a\u043b\u0438\u0435\u043d\u0442'
   27                                                   u'compare'
   28                                                      u'core'
   29                                                    u'xiaomi'
   30                      u'\u0442\u043e\u0432\u0430\u0440\u044b'
   31                                                      u'note'
   32                                                        u'de'
   33                                                       u'2gb'
   34                            u'\u043d\u0430\u0437\u0430\u0434'
   35                                  u'\u0430\u0432\u0442\u043e'
   36                                                    u'iphone'
   37                                                u'freakscore'
   38                                                      u'ebay'
   39                                        u'\u0442\u043e\u043c'

如果你需要一个vanilla Python列表:

df.dictionary.apply(pd.Series).stack().tolist()