【问题标题】:Extract specific values from pandas profiling to a table从 pandas 分析中提取特定值到表中
【发布时间】:2021-12-22 22:05:27
【问题描述】:

我正在使用 pandas 分析来生成一些具有 150 多个属性的数据帧的 HTML 报告。我想提取一些信息并将其排列在一个简单的表格中。具体来说,我需要每个变量“n_missing”中缺失数据的数量、不同的值及其对应的百分比“p_missing”。

我做过的事情,但我很难做到这一点:

df1 = pd.read_excel('df.xlsx')
profile = df1.profile_report(title="Dataset Profiling Report")
profile.to_file('dataset_report.html')                            #HTML report


profset = profile.description_set          #Extracting the info from the profile object
print(profset.keys())

OUT[]: dict_keys(['analysis', 'table', 'variables', 'scatter', 'correlations', 'missing', 'messages', 'package', 'sample', 'duplicates'])

attributes = profset["variables"]
print(attributes.keys())
OUT: dict_keys(['Attribute 1', 'Attribute 2', 'Attribute 3', 'Attribute 4'...]) #All my columns or attributes.

我认为 profile.description_set 键的“缺失”键是那个键,但我明白了:

missing = profset["missing"]
print(missing.keys())
dict_keys(['bar', 'matrix', 'heatmap', 'dendrogram'])

而且这些似乎都不是正确的。

我一直在浏览 pandas 分析文档并在线搜索,但只找到了一个可能的示例,这使我找到了我之前编写的代码。

最终目标是导出到 excel 的表格,如下所示(忽略实际值):

Attributes    n_Missing    p_missing    n_disctinct   p_disctinct
Attribute X          23         0.23              2           0.5
Attribute Y          50         0.50             50           1.0
Attribute Z           0         0.00            100           1.0
...

【问题讨论】:

  • 请发布一个最小的可重现示例。具体来说,编写一些类似df1 = pd.DataFrame(some_list) 的代码,这样我们就可以看到df1 里面的内容。否则我们帮不了你。

标签: python pandas profiling pandas-profiling


【解决方案1】:

好的,经过一番打磨,我回答了我自己的问题,并且由于熊猫分析似乎没有什么行动,我将在这里写分享并编写适合我的代码。

它非常不言自明,如果您有任何疑问,请告诉我。

显示了带有用于完全再现的虚拟数据帧的完整代码。

创建包含一些数据的数据框

dfa = pd.DataFrame(np.random.rand(20,3), columns=['attribute X', 'attribute Y', 'attribute Z'])
dfa.loc[dfa['attribute X']<0.5,'attribute X'] = np.nan
dfa.loc[dfa['attribute X']<0.75,'attribute X'] = 0.6
dfa.loc[dfa['attribute X']>0.75,'attribute X'] = "value X"
dfa 

Out[346]: 
   attribute X  attribute Y  attribute Z
0          NaN     0.929178     0.439837
1          NaN     0.620489     0.146956
2          0.6     0.971534     0.048539
3      value X     0.113160     0.344989
4      value X     0.766421     0.105712
5      value X     0.706522     0.800705
6      value X     0.451648     0.763452
7          NaN     0.110620     0.976297
8          NaN     0.032442     0.650167
9          0.6     0.532029     0.028842
10         0.6     0.316751     0.010858
11     value X     0.096364     0.381514
12         0.6     0.897551     0.426949
13     value X     0.178309     0.974560
14         NaN     0.461955     0.573013
15     value X     0.446666     0.919223
16         0.6     0.526870     0.751822
17     value X     0.709627     0.334106
18         0.6     0.780467     0.940426
19     value X     0.056930     0.846433

创建配置文件报告和 html 报告

profile_a = dfa.profile_report()
profile_a.to_file('dfa.html')

访问报告中包含的数据的键

profset = profile_a.description_set
print(profset.keys())

访问报告中分析的属性/变量/列数据

attributes = profset["variables"]
print(attributes.keys())

创建分析的属性列表以进行迭代

attributes_keys = attributes.keys()

我们可以通过访问属性的键来查询每个属性的可用数据,然后选择我们想要的任何内容

attributes['attribute X'].keys()

Out[]: dict_keys(['n_distinct', 'p_distinct', 'is_unique', 'n_unique', 'p_unique', 'type', 'hashable', 'value_counts_without_nan', 'n_missing', 'n', 'p_missing', 'count', 'memory_size'])


为了制作我决定提取的数据表。我从 previuos 列表中选择了所需的任何内容,然后进行了迭代。下面的 for 循环效率不高,但对任何人都非常清楚。

list_attribute = []
list_missing = []
list_p_missing = [] #'p_missing'
list_disctinct = [] #'n_distinct'
list_p_disctinct = [] #'p_distinct'


for i in attributes_keys:
    list_attribute.append(i)
    x = attributes[i]
    list_missing.append(x['n_missing'])
    list_p_missing.append(x['p_missing']) 
    list_disctinct.append(x['n_distinct']) 
    list_p_disctinct.append(x['p_distinct']) 
    
    
df_missing = pd.DataFrame(columns=('Attribute','Missing'))
df_missing['Attribute'] = list_attribute
df_missing['Missing'] = list_missing
df_missing['Percentage Missing'] = list_p_missing
df_missing['Disctinct values'] = list_disctinct
df_missing['Percentage Disctinct'] = list_p_disctinct 
df_missing['Percentage Disctinct'] = df_missing['Percentage Disctinct']*100
df_missing['Percentage Missing'] = df_missing['Percentage Missing']*100

准备好了


print(df_missing)

Out[345]: 
     Attribute  Missing  ...  Disctinct values  Percentage Disctinct
0  attribute X        0  ...                 2             13.333333
1  attribute Y       20  ...                20            100.000000
2  attribute Z       20  ...                20            100.000000

【讨论】:

    猜你喜欢
    • 2018-08-13
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 2023-03-16
    • 2018-08-30
    • 2020-12-22
    相关资源
    最近更新 更多