【问题标题】:Not calculating sum for all columns in pandas dataframe不计算熊猫数据框中所有列的总和
【发布时间】:2016-05-06 11:44:01
【问题描述】:

我正在使用 impyla 从 Impala 中提取数据,并使用 as_pandas 将它们转换为数据帧。我正在使用Pandas 0.18.0,Python 2.7.9

我正在尝试计算数据框中所有列的总和,并尝试选择大于阈值的列。

self.data = self.data.loc[:,self.data.sum(axis=0) > 15]

但是当我运行它时,我收到如下错误:

pandas.core.indexing.IndexingError: Unalignable boolean Series key 提供

然后我尝试如下。

print 'length : ',len(self.data.sum(axis = 0)),' all columns : ',len(self.data.columns)

然后我得到不同的长度,即

长度:78 所有列:83

我的警告低于警告

C:\Python27\lib\decimal.py:1150: Ru​​ntimeWarning: tp_compare 没有 异常返回 -1 或 -2

为了实现我的目标,我尝试了另一种方式

for column in self.data.columns:
    sum = self.data[column].sum()
    if( sum < 15 ):
        self.data = self.data.drop(column,1) 

现在我遇到了其他错误,如下所示:

TypeError:+ 的不支持的操作数类型:“十进制”和“浮点” C:\Python27\lib\decimal.py:1150: Ru​​ntimeWarning: tp_compare 没有为异常返回 -1 或 -2

然后我尝试获取每一列的数据类型,如下所示。

print 'dtypes : ', self.data.dtypes

结果所有列都是这些 int64 、 object 和 float 64 之一 然后我想改变对象中列的数据类型,如下所示

self.data.convert_objects(convert_numeric=True)

我还是遇到同样的错误,请帮我解决这个问题。

注意:在所有列中,我都没有字符串,即字符和缺失值或为空。我已使用 self.data.to_csv 进行了检查

由于我是 pandas 和 python 的新手,如果这是一个愚蠢的问题,请不要介意。我只是想学习

【问题讨论】:

    标签: python-2.7 pandas impyla


    【解决方案1】:

    请查看下面的简单代码,您可能会了解错误原因。

    import pandas as pd
    import numpy as np
    
    
    df = pd.DataFrame(np.random.random([3,3]))
    df.iloc[0,0] = np.nan
    
    print df
    print df.sum(axis=0) > 1.5
    print df.loc[:, df.sum(axis=0) > 1.5]
    
    df.iloc[0,0] = 'string'
    
    print df
    print df.sum(axis=0) > 1.5
    print df.loc[:, df.sum(axis=0) > 1.5]
    
              0         1         2
    0       NaN  0.336250  0.801349
    1  0.930947  0.803907  0.139484
    2  0.826946  0.229269  0.367627
    
    0     True
    1    False
    2    False
    dtype: bool
    
              0
    0       NaN
    1  0.930947
    2  0.826946
    
              0         1         2
    0    string  0.336250  0.801349
    1  0.930947  0.803907  0.139484
    2  0.826946  0.229269  0.367627
    
    1    False
    2    False
    dtype: bool
    
    Traceback (most recent call last):
    ...
    pandas.core.indexing.IndexingError: Unalignable boolean Series key provided
    

    很快,您需要对数据进行额外的预处理。

    df.select_dtypes(include=['object'])
    

    如果是可转换的字符串数字,你可以通过df.astype()进行转换,或者你应该清除它们。

    【讨论】:

    • 在所有专栏中,我只有数字,既不是字符串也不是 nan。将此点添加到我的问题中
    • @ManojKumar pd.to_csv() 不保证数据框的值类型。是后面的你在self.data.convert_objects(convert_numeric=True) 之后再次检查了dtypes 吗?现在不再输入objects 了吗?如果没有,也许你没有像self.data = self.data.convert_objects(convert_numeric=True) 那样就位。请检查。
    • 它正在工作我错过了任务谢谢@su79eu7k
    猜你喜欢
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 2021-10-17
    相关资源
    最近更新 更多