熊猫如何将给定字段拆分两次

Posted

技术标签:

【中文标题】熊猫如何将给定字段拆分两次【英文标题】:pandas how to split twice a given field 【发布时间】:2015-06-17 13:40:48 【问题描述】:

我想计算列中的热门主题。有些字段有逗号或点我想用它们创建一个新行。

import pandas as pd
from pandas import DataFrame, Series

sbj = DataFrame(["Africa, Business", "Oceania", 
    "Business.Biology.Pharmacology.Therapeutics", 
    "French Litterature, Philosophy, Arts", "Biology,Business", ""
     ])
sbj

我想将任何包含“.”的字段拆分为一个新的字段。或“。”

sbj_top = sbj[0].apply(lambda x: pd.value_counts(x.split(",")) if not pd.isnull(x) else pd.value_counts('---'.split(","))).sum(axis = 0)
sbj_top

我在尝试重新拆分('.')时遇到错误(AttributeError

sbj_top = sbj_top.apply(lambda x: pd.value_counts(x.split(".")) if not pd.isnull(x) else pd.value_counts('---'.split(","))).sum(axis = 0)
sbj_top

我想要的输出

sbj_top.sort(ascending=False)
plt.title("Distribution of the top 10 subjects")
plt.ylabel("Frequency")
sbj_top.head(10).plot(kind='bar', color="#348ABD")

【问题讨论】:

你想要的输出是什么? 快速查看第一次拆分的输出会显示结果中的空格。您需要使用 trim()。 您要保留原始索引吗?例如,第一行应该变成“0, Africa”和“0, Business”吗? 嗨@cphlewis 我只想做value_counts() 这样我就可以做一个.plot() 【参考方案1】:

您可以将 Counter 与来自 itertools 的链一起使用。请注意,我在解析之前先将句点替换为逗号。

from collections import Counter
import itertools
from string import whitespace

trimmed_list = [i.replace('.', ',').split(',') for i in sbj[0].tolist() if i != ""]
item_list = [item.strip(whitespace) for item in itertools.chain(*trimmed_list)]
item_count = Counter(item_list)

>>> item_count.most_common()
[('Business', 3),
 ('Biology', 2),
 ('Oceania', 1),
 ('Pharmacology', 1),
 ('Philosophy', 1),
 ('Africa', 1),
 ('French Litterature', 1),
 ('Therapeutics', 1),
 ('Arts', 1)]

如果您需要 DataFrame 形式的输出:

df = pd.DataFrame(item_list, columns=['subject'])
>>> df
           subject
0               Africa
1             Business
2              Oceania
3             Business
4              Biology
5         Pharmacology
6         Therapeutics
7   French Litterature
8           Philosophy
9                 Arts
10             Biology
11            Business

【讨论】:

以上是关于熊猫如何将给定字段拆分两次的主要内容,如果未能解决你的问题,请参考以下文章

如何正确使用带有应用功能的熊猫 groupby 来解决副作用? (第一组申请两次)

两次拆分后的 java.lang.ArrayIndexOutOfBoundsException [重复]

如何在熊猫中拆分没有给定分隔符的字符串

dataTable如何重新初始化

如何以不同的条件选择相同的字段两次并将结果显示为单独的字段

如何将字符串数组拆分为新的字符串数组并删除重复项