2016-02-14 2 views
-2

Я новичок в python, и я использую панды, чтобы играть с кадрами данных и отчетами о качестве данных. На данный момент я могу прочитать CSV-файл в кадре данных, отобразить его и выполнить ряд действий для разных столбцов.Python Dictionary Добавление значений

То, что я пытаюсь сделать, состоит в том, чтобы разбить имена столбцов на две разные группы, преподносить разные функции в столбцах внутри групп, а затем распечатать результаты в таблице.

Мой текущий подход использует цикл for с вложенным оператором if. Я могу заставить это работать для одной функции, но моя проблема заключается в сохранении значений. У меня есть около 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

Вы можете добавить образец вашей dataframe? – jezrael

+0

Почему вы пытаетесь получить эти статистические данные? Просто взглянуть на них или планируете использовать их в другой части своей программы? – Arthur

+0

Просто практиковать питон в основном, складывая их вместе, а затем просто отображая их в таблице. @jezrael, вы хотите, чтобы некоторые примеры данных или вызов dataframe? – Hayes121

ответ

1

Это решение, которое будет вычислять значения и помещать их в dict dict.

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']

В целом, если у вас есть a pandas DataFrame, и вы хотите быстро получить несколько выборочных статистических данных, попробуйте использовать метод .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}}