【问题标题】:Plot a histogram in pandas columns with a mapping function使用映射函数在 pandas 列中绘制直方图
【发布时间】:2017-11-13 23:02:18
【问题描述】:

我有一个csv 文件,我用pandas 处理它。该列名为manual_raw_value 我想检索此列中的唯一字符并创建一个histogram

要检索所有唯一值,我做了以下操作:

 unique_values = set(df.manual_raw_value.apply(list).sum())

{' ',
 '!',
 '"',
 '%',
 '&',
 "'",
 '(',
 ')',
 '*',
 '+',
 ',',
 '-',
 '.',
 '/',
 '0',
 '1',
 '2',
 '3',
 '4',
 '5',
 '6',
 '7',
 '8',
 '9',
 ':',
 '=',
 '>',
 '?',
 '@',
 '_',
 'a',
 'b',
 'c',
 'd',
 'e',
 'f',
 'g',
 'h',
 'i',
 'j',
 'k',
 'l',
 'm',
 'n',
 'o',
 'p',
 'q',
 'r',
 's',
 't',
 'u',
 'v',
 'w',
 'x',
 'y',
 'z'}

这是数据

 manual_raw_value
    6,35
    11,68
    VOTRE
    AVEL AR VRO
    2292
    questions.
    nb
    les
    937,99
    à
    et
    TTC
    1
    620
    Echéance
    vos
    ROB21
    Pièce
    AGRIAL
    désignation
    des
    taux
    13s
    2
    par
    le
    mois,
    32
    21/07/2016
    FR
    au
    0
    téléphonique
    BROYEUR
    et
    ST
    TVA
    de
    des
    ECHEANCIER
    à
    ne
    lieu
    481,67
    N°0016
    de
    ministère
    de
    20/11/2015
    Si
    vous
    59
    cas
    EUR
    3.19
    2
    contrôle
    assurances
    BAS
    et
    4423873
    renseignements
    6104219
    C9DECOMPTEDIVERS
    6635
    DE
    10825

现在,由于我有unique values,我想制作一个直方图。 这是我尝试过的

  import pandas as pd
    def find_group(val):
        unique_values = set(df.manual_raw_value.apply(list).sum())
        for unique in unique_values:
            # get the number of occurence of all the unique values
            # then make a histogram



    df = pd.read_csv('words.csv',sep=',')
    df = df.astype(str)
    df.manual_raw_value=df.manual_raw_value.str.lower()
    df.manual_raw_value.apply(find_group)
    df.manual_raw_value.apply(find_group).value_counts().plot(kind='bar')

唯一值是函数返回的值 unique_values = set(df.manual_raw_value.apply(list).sum()){' ', '!', '"', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', ..... 等等。 现在看一下手动row values : 6,35 11,68 的两个值,然后我们可以说1 appears twice 6 twice ',' twice 3 one time 5 one time

Edit-1 我尝试使用此代码制作alpha cellsalpahnumeric 细胞和special char cells 出现次数的直方图

def find_group(val):
    val = str(val)
    if val.isalpha():
        return 'Alpha'
    elif val.isalnum and any(c.isalpha() for c in val):
        return 'Alphanumeric'
    else:
        return 'Special'

df.Column_values.apply(find_group)
df.Column_values.apply(find_group).value_counts().plot(kind='bar')

现在我想在字符级别制作直方图:

  • 通过遍历每个单元格来获取列中的唯一字符。 (完成)

  • 计算这些字符在所有单元格中出现的次数并制作直方图。 # 我被它困住了 - 一次

Edit-2 让我们举一个实际的例子。假设我的专栏叫Column_value

 Column_value
    hello
    good
    morning
    how 
    are 
    you

1-在每一行计算每个字符出现的次数

hello :  h=1 l=2 o=1 e=1
good :   g=1 o=2 d=1
morning : m=1 o=1 r=1 n=2 g=1
how: h=1 o=1 w=1 
are : a=1 r=1 e=1
you: y=1 o=1 u=1

2-求和得到每个字符在所有行中出现的次数

h=1+1=2
l=2
o=2+1+1+1=5
e=1+1=2
g=1
d=1

等等 现在,做一个直方图 h=2 , l=2 , o=5, e=2, g=1, d=1

【问题讨论】:

  • @ImportanceOfBeingErnest,请查看我的更新。我想通过循环遍历单元格来计算该列中每个字符的出现次数,然后制作直方图
  • @ImportanceOfBeingErnest,请参阅更新 2 以获取实际示例
  • @vincent75 我猜你不想要唯一值的直方图,那么直方图总是 1。

标签: python pandas matplotlib dataframe histogram


【解决方案1】:

以 OP 为例。

import pandas as pd
words=["hello","good","morning","how","are","you"]
df=pd.DataFrame(words,columns=['words'])

pd.Series(list(df.words.str.cat())).value_counts().plot(kind="bar")


在 df.words.str.cat() 之后,也可以使用正则表达式来过滤字符

【讨论】:

    【解决方案2】:

    pandas 系列内置直方图功能。例如:

    df['col'] = [1,1,1,2,3,4,4]
    df.col.hist()
    

    将返回每个值出现的直方图。 但是,由于非数值可能会导致出现错误,您也可以使用 value_countsplot(kind='bar') 方法。

    df.col.value_counts()
    

    将返回 Series,并将 value 作为索引并作为 value 计数。

    然后你可以运行plot 来显示直方图:

    df.col.value_counts().plot(kind = 'bar')
    

    【讨论】:

    • 请参阅编辑 2 和 1。我正在寻找一个统计所有字符串中每个字符出现次数的直方图
    • 更新说第一个问题(每个单元格一个字符)已经解决,所以我从那里提供了解决方案。如果您在拆分字符时遇到问题,请先尝试按字符拆分为列,然后使用 pandas.melt link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多