2016-02-14 22 views
-2

我是python的新手,我正在使用熊猫来玩弄数据框和数据质量报告。目前,我可以将.csv文件读取到数据框中,显示它并针对不同的列执行多项操作。Python字典添加值

我想要做的是将列名拆分成两个不同的组,在组内的列上执行不同的功能,然后在表中打印结果。

我目前的做法是使用嵌套if语句的for循环。我可以得到这个功能,但我的问题是存储值。每列有大约5个函数需要执行并保存每个列标题。

我的问题是,我该如何创建一个字典条目,其中包含列名和其后的所有函数值?

for column_name, column in df.transpose().iterrows(): 
if column_name in CONT: 
    #X = column_name 
    count = (df[column_name].count()) 
    min = min(df[column_name]) 
    mean = (df[column_name].mean()) 
    #How to add results into dictionary entry for column_name 
    d = (column_name:count,min,mean) 

    print(d) 
else: 
    count2 = (df[column_name].count()) 
    mode = (df[column_name].mode()) 
    #How to add results into dictionary entry for column_name 
    d = (column_name:count2, mode) 
    print(d) 
    i = 1 
+0

您可以将您的数据帧的样本? – jezrael

+0

你为什么试图获得这些统计数据?只是看看他们,还是计划在程序的另一部分使用它们? – Arthur

+0

只是为了练习python,把它们放在一起,然后在表格中显示它们。 @jezrael是否需要一些示例数据或数据框调用? – Hayes121

回答

1

这里是一个解决方案,它将计算值并将它们放入字典中。

result_dict = {} # the dict in which you want to get the statistics 

# the list of columns can be accessed through df.columns 
for column_name in df.columns: 
    col = df[column_name] # we get the column 
    if column_name in CONT: 
    stats = {} # we create a dict to keep the stats for this column 
    stats['count'] = col.count() 
    stats['mean'] = col.mean() 
    stats['min'] = col.min() 
    result_dict[column_name] = stats # we add the stats dict to our result_dict 

    else: 
    stats = {} 
    stats['count'] = col.count() 
    stats['mode'] = col.mode() 
    result_dict[column_name] 

在这个脚本的最后,你必须包含每列一个统计词典字典,你可以通过做访问统计,例如:result_dict['my column']['mean']

更一般地,如果你有一个熊猫数据框,你想快速得到一些样本统计,尝试使用.describe()方法,这将给你一个很好的数组。默认情况下,它只返回统计数值列,但称呼它的方式来获得对所有列的信息:我想你可以使用

df.describe(include='all') 
0

import pandas as pd 

df = pd.DataFrame({'a': [1, 1, 2, 3], 'b': [1, 1, 2, 3], 'c':[1, 9, 1, 7]}) 
print df 
    a b c 
0 1 1 1 
1 1 1 9 
2 2 2 1 
3 3 3 7 

CONT = ['a', 'b'] 
count = df[CONT].count() 
min = df[CONT].min() 
mean = df[CONT].mean() 

df1 = pd.concat([count, min, mean], axis=1, keys=['count','min','mean']) 

print df1 
    count min mean 
a  4 1 1.75 
b  4 1 1.75 

print df1.to_dict(orient='index') 
{'a': {'count': 4.0, 'mean': 1.75, 'min': 1.0}, 'b': {'count': 4.0, 'mean': 1.75, 'min': 1.0}} 

print CONT 
['a', 'b'] 

#remove items from columns which are not in CONT 
CONT1 = [ x for x in df.columns.tolist() if x not in CONT ] 
print CONT1 
['c'] 

count = df[CONT1].count() 
min = df[CONT1].min() 
mean = df[CONT1].mean() 

df2 = pd.concat([count, min, mean], axis=1, keys=['count','min','mean']) 
print df2 
    count min mean 
c  4 1 4.5 

print df2.to_dict(orient='index') 
{'c': {'count': 4.0, 'mean': 4.5, 'min': 1.0}}