使用映射函数在pandas列中绘制直方图

时间:2017-06-12 12:50:30

标签: python pandas matplotlib dataframe histogram

我有一个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

修改-1 我尝试使用此代码来制作alpha cellsalpahnumeric单元格和special char cells

出现的numbre直方图
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')

现在我想在角色级别制作直方图:

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

  • 计算所有单元格中这些字符的出现次数并进行直方图。 #l被卡住了 - 一次

修改-2 让我们举一个实际的例子。我们说我的专栏名为Column_value

 Column_value
    hello
    good
    morning
    how 
    are 
    you

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

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

2 个答案:

答案 0 :(得分:2)

以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")

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

答案 1 :(得分:0)

pandas系列有一个内置的直方图功能。例如:

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

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

df.col.value_counts()

将返回系列,其值为索引并计为值。

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

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