分类变量汇总熊猫



如标题所述,我想对pandas中的分类变量进行一些总结分析,但搜索了一段时间后仍未找到令人满意的解决方案。因此,我开发了以下代码,作为一种自我回答的问题,希望So上的某个人可以帮助改进。

test_df = pd.DataFrame({'x':['a', 'b','b','c'],
'y':[1, 0, 0, np.nan],
'z':['Jay', 'Jade', 'Jia', ''],
'u':[1, 2, 3, 3]})
def cat_var_describe(input_df, var_list):
df = input_df.copy()
# dataframe to store result
res = pd.DataFrame({'var_name', 'values', 'count'})
for var in var_list:
temp_res = df[var].value_counts(dropna=False).rename_axis('unique_values').reset_index(name='counts')
temp_res['var_name'] = var
if var==var_list[0]:
res = temp_res.copy()
else:
res = pd.concat([res, temp_res], axis=0)
res = res[['var_name', 'unique_values', 'counts']]
return res
cat_des_test = cat_var_describe(test_df, ['x','y','z','u'])
cat_des_test

如有任何有益的建议,我们将不胜感激。

您可以使用pandas DataFramedescribe()方法。默认情况下,describe()仅包括数字数据。若要包含分类变量,必须使用include参数。

使用'object'只返回非数字数据

test_df.describe(include='object')

使用'all'返回带有NaN的所有列的摘要,其中统计信息不适合数据类型

test_df.describe(include='all')

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.describe.html

您可以使用unique()方法来获取列的单个值列表,例如:

test_df['x'].unique()

为了获取列中值的出现次数,可以使用value_counts():

test_df['x'].value_counts()

DataFrame的所有列上的简化循环可能看起来像这样:

for col in list(test_df):
print('variable:', col)
print(test_df[col].value_counts(dropna=False).to_string())

您可以使用描述函数

test_df.describe() 

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.describe.html

最新更新