python-2.7 - Pandas:计算数据帧行和列中零的比例

标签 python-2.7 pandas

我在下面有这个代码。令我惊讶的是,它适用于列而不适用于行。

import pandas as pd

def summarizing_data_variables(df):
    numberRows=size(df['ID'])
    numberColumns=size(df.columns)
    summaryVariables=np.empty([numberColumns,2], dtype =  np.dtype('a50'))    
    cont=-1    
    for column in df.columns:
        cont=cont+1
        summaryVariables[cont][0]=column
        summaryVariables[cont][1]=size(df[df[column].isin([0])][column])/(1.0*numberRows)
    print summaryVariables

def summarizing_data_users(fileName):
    print "Sumarizing users..."   
    numberRows=size(df['ID'])
    numberColumns=size(df.columns)      
    summaryVariables=np.empty([numberRows,2], dtype =  np.dtype('a50'))    
    cont=-1

    for row in df['ID']:
        cont=cont+1
        summaryVariables[cont][0]=row
        dft=df[df['ID']==row]
        proportionZeros=(size(dft[dft.isin([0])])-1)/(1.0*(numberColumns-1)) # THe -1 is used to not count the ID column
        summaryVariables[cont][1]=proportionZeros
    print summaryVariables


if __name__ == '__main__':

    df = pd.DataFrame([[1, 2, 3], [2, 5, 0.0],[3,4,5]])
    df.columns=['ID','var1','var2']
    print df

    summarizing_data_variables(df)
    summarizing_data_users(df) 

输出是这样的:
   ID  var1  var2
0   1     2     3
1   2     5     0
2   3     4     5
[['ID' '0.0']
 ['var1' '0.0']
 ['var2' '0.333333333333']]
Sumarizing users...
[['1' '1.0']
 ['2' '1.0']
 ['3' '1.0']]

我期待用户:
Sumarizing users...
[['1' '0.0']
 ['2' '0.5']
 ['3' '0.0']]

似乎问题出在这一行:

dft[dft.isin([0])]



它不会像第一种情况那样将 dft 限制为“真”值。

你能帮我解决这个问题吗?
(1)如何更正用户(ROWS)部分(上面的第二个功能)?
(2) 这是最有效的方法吗? 【我的数据库很大】

编辑:

在函数 summarizing_data_variables(df) 中,我尝试评估每列中零的比例。在上面的例子中,变量 Id 没有零(因此比例为零),变量 var1 没有零(因此比例也为零)并且变量 var2 在第二行中显示为零(因此比例为 1/3)。我将这些值保存在 2D numpy.array 中,其中第一列是数据框列的标签,第二列是评估的比例。

函数 summarizing_data_users 我想做同样的事情,但我对每一行都这样做。但是,它不起作用。

最佳答案

试试这个而不是第一个功能:

print(df[df == 0].count(axis=1)/len(df.columns))

更新(更正):
print('rows')
print(df[df == 0].count(axis=1)/len(df.columns))
print('cols')
print(df[df == 0].count(axis=0)/len(df.index))

输入数据(我决定添加几行):
ID  var1  var2
1     2     3
2     5     0
3     4     5
4    10    10
5    1      0

输出:
rows
ID
1    0.0
2    0.5
3    0.0
4    0.0
5    0.5
dtype: float64
cols
var1    0.0
var2    0.4
dtype: float64

关于python-2.7 - Pandas:计算数据帧行和列中零的比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35829211/

相关文章:

Python 2.7 - ttk 模块似乎无法在 Windows 8.1 中运行

python - 为什么太长的变量名会导致 'SyntaxError: invalid syntax' ?

pandas - Python - reshape 、旋转、unstack - 多重索引

python - 如果其中一列具有相同数据,如何通过从每个列中选择几列来连接两个数据框

Python 根记录器消息未通过使用 fileConfig 配置的处理程序记录

python3编码二进制时的问题

PYTHONPATH 与符号链接(symbolic link)

python - 从雅虎财经提取数据时出错

python - 从时间序列 CSV 数据构建时间线

pandas - 在 Google Colabs 中何处/如何安全存储 API key ?