使用 pandas 数据框中的函数从列表创建列表
Create list from list with function in pandas dataframe
我想创建一个新的 pandas 列,方法是 运行 在另一列中的单词列表上使用词干提取功能。我可以通过使用 apply 和 lambda 来标记单个字符串,但我无法弄清楚如何将其推断为 运行 它在单词列表上的情况。
test = {'Statement' : ['congratulations on the future','call the mechanic','more text'], 'Other' : [2,3,4]}
df = pd.DataFrame(test)
df['tokenized'] = df.apply (lambda row: nltk.word_tokenize(row['Statement']), axis=1)
我知道我可以用嵌套的 for 循环解决它,但这似乎效率低下并导致 SettingWithCopyWarning:
df['stems'] = ''
for x in range(len(df)):
print(len(df['tokenized'][x]))
df['stems'][x] = row_stems=[]
for y in range(len(df['tokenized'][x])):
print(df['tokenized'][x][y])
row_stems.append(stemmer.stem(df['tokenized'][x][y]))
没有更好的方法吗?
编辑:
下面是结果的示例:
Other Statement tokenized stems
0 2 congratulations on the future [congratulations, on, the, future] [congratul, on, the, futur]
1 3 call the mechanic [call, the, mechanic] [call, the, mechan]
2 4 more text [more, text] [more, text]
确实不需要 运行 循环。至少不是显式循环。列表理解就可以了。
假设您使用 Porter 词干分析器 ps
:
df['stems'] = df['tokenized'].apply(lambda words:
[ps.stem(word) for word in words])
我想创建一个新的 pandas 列,方法是 运行 在另一列中的单词列表上使用词干提取功能。我可以通过使用 apply 和 lambda 来标记单个字符串,但我无法弄清楚如何将其推断为 运行 它在单词列表上的情况。
test = {'Statement' : ['congratulations on the future','call the mechanic','more text'], 'Other' : [2,3,4]}
df = pd.DataFrame(test)
df['tokenized'] = df.apply (lambda row: nltk.word_tokenize(row['Statement']), axis=1)
我知道我可以用嵌套的 for 循环解决它,但这似乎效率低下并导致 SettingWithCopyWarning:
df['stems'] = ''
for x in range(len(df)):
print(len(df['tokenized'][x]))
df['stems'][x] = row_stems=[]
for y in range(len(df['tokenized'][x])):
print(df['tokenized'][x][y])
row_stems.append(stemmer.stem(df['tokenized'][x][y]))
没有更好的方法吗?
编辑:
下面是结果的示例:
Other Statement tokenized stems
0 2 congratulations on the future [congratulations, on, the, future] [congratul, on, the, futur]
1 3 call the mechanic [call, the, mechanic] [call, the, mechan]
2 4 more text [more, text] [more, text]
确实不需要 运行 循环。至少不是显式循环。列表理解就可以了。
假设您使用 Porter 词干分析器 ps
:
df['stems'] = df['tokenized'].apply(lambda words:
[ps.stem(word) for word in words])