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
我有一个如下所示的数据集:
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