2017-06-12 75 views
1

l有csv文件,该文件与pandas一起处理。该列被称为manual_raw_value我想检索此列中的唯一字符并制作histogram使用映射函数在pandas列中绘制直方图

检索所有不重复值L做了以下内容:

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 

现在,由于L具有unique values升要打个histgram。 这里是欧莱雅已经试过

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 cells occurence的numbre的直方图,alpahnumeric细胞和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') 

现在升想使一个直方图在人物等级:

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

  • 计算这些字符在所有单元格中出现的次数并生成直方图。 #1获得stucked它 - 一旦

编辑-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

+0

@ImportanceOfBeingErnest,请参阅我的更新。我想通过循环单元格来计算该列中每个字符的出现次数,然后制作一个直方图 – vincent75

+0

@ImportanceOfBeingErnest,请参阅更新2的实际示例 – vincent75

+0

@ vincent75我想你不想要直方图的唯一值,然后直方图总是1. – suvy

回答

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()之后,人们还可以使用正则表达式过滤字符

0

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

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') 
+1

请参阅编辑2和1.我正在寻找一个直方图来统计所有字符串中每个字符的出现次数 – vincent75

+1

更新说明第一个问题(每个单元格的单个字符)已解决,所以我从那里提供了解决方案。如果您在分割字符时遇到麻烦,请首先尝试使用char分隔列,然后使用“pandas.melt”链接(https://pandas.pydata.org/pandas-docs/stable/generated/pandas.melt的.html) – Dimgold