Pandas 列表列转文本列数据预处理

Pandas converting Column of Lists to Column of Text Data Pre-Processing

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

sentiment text
positive ['chewy', 'what', 'dhepburn', 'said']
neutral ['chewy', 'plus', 'you', 've', 'added']

我想将其转换为:

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

我基本上想将由列表组成的 '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)

我不断收到类似这样的信息:

sentiment text
positive ['c h e w y', 'w h a t', 'd h e p b u r n', 's a i d']
neutral ['c h e w y', 'p l u s', 'y o u', 'v e', 'a d d e d']

这是机器学习模型数据预处理的一部分。我在 Google Colab(类似于 Juypter Notebook)中工作。

我认为你的问题是 axis = 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

使用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

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

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