代码之家  ›  专栏  ›  技术社区  ›  tonytone

Pandas将列表列转换为文本数据预处理列

  •  0
  • tonytone  · 技术社区  · 2 年前

    我有一个如下所示的数据集:

    观点 文本
    积极乐观的 [‘chewy’、‘what’、‘dhepburn’、‘said’]
    中立的 ['chewy','plus','you','ve','added']

    我想把它转换成:

    观点 文本
    积极乐观的 切尼·德伯恩说了什么
    中立的 你添加的chewy plus

    我主要想将由列表组成的“text”列转换为一列文本。

    我已经完成了此代码的多个版本:

    def joinr(words):
       return ','.join(words)
    
    #df['text'] = df.apply(lambda row: joinr(row['text']), axis=1)
    #df['text'] = df['text'].apply(lambda x: ' '.join([x]))
    df['text'] = df['text'].apply(joinr)
    

    我不断得到类似的东西:

    观点 文本
    积极乐观的 [“c h e w y”,“w h a t”,“d h e p b u r n”,“s a i d”]
    中立的 [“c h e w y”,“p l u s”,“y o u”,“v e”,“a d d e d”]

    这是ML模型数据预处理的一部分。我在Google Colab工作(类似于Juypter笔记本)。

    2 回复  |  直到 2 年前
        1
  •  1
  •   ArchAngelPwn    2 年前

    我相信你的问题是轴=1你不需要它

    data = {
        'sentiment' : ['positive', 'neutral'],
        'text' : ["['chewy', 'what', 'dhepburn', 'said']", "['chewy', 'plus', 'you', 've', 'added']"]
    }
    df = pd.DataFrame(data)
    df['text'] = df['text'].apply(lambda x : x.replace('[', '')).apply(lambda x : x.replace(']', '')).apply(lambda x : x.replace("'", ''))
    df['text'] = df['text'].apply(lambda x : x.split(','))
    df['text'] = df['text'].agg(' '.join)
    df
    
        2
  •  1
  •   keramat    2 年前

    使用 join :

    df['test'].str.join(' ')
    

    演示:

    df = pd.DataFrame({'test': [['chewy', 'what', 'dhepburn', 'said']]})
    df['test'].str.join(' ')
    

    输出:

    0    chewy what dhepburn said
    Name: test, dtype: object
    

    根据评论:

    #Preparing data
    string = """sentiment   text
    positive    ['chewy', 'what', 'dhepburn', 'said']
    neutral ['chewy', 'plus', 'you', 've', 'added']"""
    data = [x.split('\t') for x in string.split('\n')]
    df = pd.DataFrame(data[1:], columns = data[0])
    
    #Solution
    df['text'].apply(lambda x: eval(x)).str.join(' ')
    

    此外,您可以更简单地使用:

    df['text'].str.replace("\[|\]|'|,",'')
    

    输出:

    0    chewy what dhepburn said
    1     chewy plus you ve added
    Name: text, dtype: object
    
        3
  •  0
  •   mozway    2 年前

    如果有列表的字符串表示,则可以使用:

    from ast import literal_eval
    
    df['text'] = df['text'].apply(lambda x: ' '.join(literal_eval(x)))
    

    如果确实只想删除括号和逗号,请使用正则表达式:

    df['text'] = df['text'].str.replace('[\[\',\]]', '', regex=True)
    

    输出:

      sentiment                      text
    0  positive  chewy what dhepburn said
    1   neutral   chewy plus you ve added