如何清理或转换这些数据值以获得字数分布?

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
...

有什么建议吗?

编辑:值为字符串类型

我会做三个手术。

  1. 创建一个新列,将“profile_values”列的值转换为实际列表:

    df['new_column'] = [eval(x) for x in df['profile_values']
    
  2. 在数据框外创建一个列表,将所有单词包含在一个列表中:

    single_list = [x for y in df['new_column'] for x in y]
    
  3. 使用函数计算列表的频率,如下所示:

    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