如何清理或转换这些数据值以获得字数分布?
How to clean or convert these data values to gain word count distribution?
我有 pandas 个数据框,其对象类型列具有每个用户的分析值,如下所示:
print(df[profile_values])
1 [\n "ab",\n "abc",\n "abcd"\n]
1 NaN
3 [\n "ab",\n "abcd"\n]
4 NaN
5 [\n "ab"\n]
...
需要 trim 值或更改数据类型,以便我可以计算单词数以找到所述单词的分布。像这样:
word count
ab 3
abc 1
abcd 2
...
有什么建议吗?
编辑:值为字符串类型
我会做三个手术。
创建一个新列,将“profile_values”列的值转换为实际列表:
df['new_column'] = [eval(x) for x in df['profile_values']
在数据框外创建一个列表,将所有单词包含在一个列表中:
single_list = [x for y in df['new_column'] for x in y]
使用函数计算列表的频率,如下所示:
import collections
counter = collections.Counter(single_list)
然后你就有了列表中每个单词的频率。
如果你的数据框是这样的:
df = pd.DataFrame(['[\n "ab",\n "abc",\n "abcd"\n]', np.nan, '[\n "ab",\n"abcd"\n]', np.nan, '[\n "ab"\n]'], columns=["profile_values"])
有几个步骤。将文字转换为字符串列表,explode
会将你的一系列列表转换为单个系列,然后计算重复值:
from ast import literal_eval
counts = df.dropna()["profile_values"].apply(literal_eval).explode().value_counts()
输出:
ab 3
abcd 2
abc 1
Name: profile_values, dtype: int64
我有 pandas 个数据框,其对象类型列具有每个用户的分析值,如下所示:
print(df[profile_values])
1 [\n "ab",\n "abc",\n "abcd"\n]
1 NaN
3 [\n "ab",\n "abcd"\n]
4 NaN
5 [\n "ab"\n]
...
需要 trim 值或更改数据类型,以便我可以计算单词数以找到所述单词的分布。像这样:
word count
ab 3
abc 1
abcd 2
...
有什么建议吗?
编辑:值为字符串类型
我会做三个手术。
创建一个新列,将“profile_values”列的值转换为实际列表:
df['new_column'] = [eval(x) for x in df['profile_values']
在数据框外创建一个列表,将所有单词包含在一个列表中:
single_list = [x for y in df['new_column'] for x in y]
使用函数计算列表的频率,如下所示:
import collections counter = collections.Counter(single_list)
然后你就有了列表中每个单词的频率。
如果你的数据框是这样的:
df = pd.DataFrame(['[\n "ab",\n "abc",\n "abcd"\n]', np.nan, '[\n "ab",\n"abcd"\n]', np.nan, '[\n "ab"\n]'], columns=["profile_values"])
有几个步骤。将文字转换为字符串列表,explode
会将你的一系列列表转换为单个系列,然后计算重复值:
from ast import literal_eval
counts = df.dropna()["profile_values"].apply(literal_eval).explode().value_counts()
输出:
ab 3
abcd 2
abc 1
Name: profile_values, dtype: int64