Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对数据帧的每一列执行多个探索性测试_Python_Pandas - Fatal编程技术网

Python 对数据帧的每一列执行多个探索性测试

Python 对数据帧的每一列执行多个探索性测试,python,pandas,Python,Pandas,是否有一种更干净的方法可以对表进行此类测试,例如空值、唯一值等,并将结果放入新的数据帧中。这段代码对我来说很有用,但我相信有更好的方法 输入: lvl1 = ['A','A','A','A','A','B','B','B','B',np.nan ] lvl2 = ['foo','foo','bar','bar','bar','foo','foo','foo','bar','bar'] df = pd.DataFrame({ 'L1' : lvl1, 'L2' : lvl2}) df.appl

是否有一种更干净的方法可以对表进行此类测试,例如空值、唯一值等,并将结果放入新的数据帧中。这段代码对我来说很有用,但我相信有更好的方法

输入:

lvl1 = ['A','A','A','A','A','B','B','B','B',np.nan ]
lvl2 = ['foo','foo','bar','bar','bar','foo','foo','foo','bar','bar']
df = pd.DataFrame({ 'L1' : lvl1, 'L2' : lvl2})


df.apply(lambda x: [ 100*(1-x.count()/len(x.index)),x.dtype,x.unique()],result_type='expand').T.rename(index=str, columns={0: "Nullity %", 1: "Type",2:"Unique Values"})
输出

    Nullity %   Type    Unique Values
L1  10          object  [A, B, nan]
L2  0           object  [foo, bar]
在将来,我想扩展它,包括对列的其他测试,并想知道在pandas中做这件事的正确方法是什么


UPD:附加问题:如何将每个唯一值的计数添加到此测试中?

一种方法是使用字典定义列名和相关函数:

d = {'Nullity %': lambda x: 100*(1-x.count()/len(x.index)),
     'Type': lambda x: x.dtype,
     'Unique Values': lambda x: x.unique()}

res = pd.DataFrame([{name: func(df[col]) for name, func in d.items()} for col in df],
                   index=df.columns)

print(res)

    Nullity %    Type Unique Values
L1       10.0  object   [A, B, nan]
L2        0.0  object    [foo, bar]
要获得更实用的解决方案,您可以使用
操作员
模块:

from operator import attrgetter, methodcaller

d = {'Nullity %': lambda x: 100*(1-x.count()/len(x.index)),
     'Type': attrgetter('dtype'),
     'Unique Values': methodcaller('unique')}

您能给出一个输入和预期输出的示例吗?
df.descripe()
不能满足您的要求?@bakka
df.descripe()
不能给我空值、类型或唯一值您当前的解决方案有什么问题?对我来说似乎很好。@jpp这是一个由不同代码片段组成的弗兰肯斯坦,我仍然在想它是如何工作的。例如,如何从一开始就定义列名,而不必在以后重命名?非常感谢!尽管如此,我还是会坚持我的解决方案,因为它要少得多verbose@hashimov,将所有内容放在一行并不意味着“不那么冗长”!我的意思是它更容易复制/粘贴供我日常使用