【问题标题】:Python: convert elem to listPython:将元素转换为列表
【发布时间】:2016-11-03 09:31:08
【问题描述】:

我有数据框

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?

【问题讨论】:

    标签: python list pandas


    【解决方案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
    • @MaxU - 谢谢,我之前使用过[item for sublist in l for item in sublist],但这更快。
    • L = list(chain.from_iterable(df.dictionary)) 返回[u'[', u'u', u"'", u'p', u'a', u'd', u"'", u',',
    • 我已将包含数据的文件发送到您的电子邮件
    【解决方案2】:

    您可以先将列表转换为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'
    

    如果你需要一个普通的 Python 列表:

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

    【讨论】:

    • 它也返回了我的符号
    • @PetrPetrov,这意味着您的 dictionary 列包含该符号的列表而不是单词列表...
    猜你喜欢
    • 1970-01-01
    • 2023-02-25
    • 2018-07-20
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    • 2018-05-07
    相关资源
    最近更新 更多