不计算 pandas 数据框中所有列的总和
Not calculating sum for all columns in pandas dataframe
我正在使用 impyla
从 Impala 中提取数据,并使用 as_pandas
将它们转换为数据帧。我正在使用 Pandas 0.18.0
、Python 2.7.9
我正在尝试计算数据框中所有列的总和,并尝试 select 大于阈值的列。
self.data = self.data.loc[:,self.data.sum(axis=0) > 15]
但是当我 运行 时,我得到如下错误:
pandas.core.indexing.IndexingError: Unalignable boolean Series key
provided
然后我试了下。
print 'length : ',len(self.data.sum(axis = 0)),' all columns : ',len(self.data.columns)
然后我得到不同的长度,即
length : 78 all columns : 83
我低于警告
C:\Python27\lib\decimal.py:1150: RuntimeWarning: tp_compare didn't
return -1 or -2 for exception
为了实现我的目标,我尝试了另一种方式
for column in self.data.columns:
sum = self.data[column].sum()
if( sum < 15 ):
self.data = self.data.drop(column,1)
现在我遇到了如下其他错误:
TypeError: unsupported operand type(s) for +: 'Decimal' and 'float'
C:\Python27\lib\decimal.py:1150: RuntimeWarning: tp_compare didn't return -1 or -2 for exception
然后我尝试获取每一列的数据类型,如下所示。
print 'dtypes : ', self.data.dtypes
结果的所有列都是其中之一 int64,object 和 float 64
然后我想改变对象中列的数据类型,如下所示
self.data.convert_objects(convert_numeric=True)
我仍然遇到同样的错误,请帮助我解决这个问题。
注意: 在所有列中我都没有字符串,即字符和缺失值,或者 empty.I 使用 self.data.to_csv
[=25= 检查了这一点]
因为我是 pandas 和 python 的新手,请不要介意这是一个愚蠢的问题。我只想学习
请查看下面的简单代码,您可能会了解错误的原因。
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()
转换,否则清除即可。
我正在使用 impyla
从 Impala 中提取数据,并使用 as_pandas
将它们转换为数据帧。我正在使用 Pandas 0.18.0
、Python 2.7.9
我正在尝试计算数据框中所有列的总和,并尝试 select 大于阈值的列。
self.data = self.data.loc[:,self.data.sum(axis=0) > 15]
但是当我 运行 时,我得到如下错误:
pandas.core.indexing.IndexingError: Unalignable boolean Series key provided
然后我试了下。
print 'length : ',len(self.data.sum(axis = 0)),' all columns : ',len(self.data.columns)
然后我得到不同的长度,即
length : 78 all columns : 83
我低于警告
C:\Python27\lib\decimal.py:1150: RuntimeWarning: tp_compare didn't return -1 or -2 for exception
为了实现我的目标,我尝试了另一种方式
for column in self.data.columns:
sum = self.data[column].sum()
if( sum < 15 ):
self.data = self.data.drop(column,1)
现在我遇到了如下其他错误:
TypeError: unsupported operand type(s) for +: 'Decimal' and 'float' C:\Python27\lib\decimal.py:1150: RuntimeWarning: tp_compare didn't return -1 or -2 for exception
然后我尝试获取每一列的数据类型,如下所示。
print 'dtypes : ', self.data.dtypes
结果的所有列都是其中之一 int64,object 和 float 64 然后我想改变对象中列的数据类型,如下所示
self.data.convert_objects(convert_numeric=True)
我仍然遇到同样的错误,请帮助我解决这个问题。
注意: 在所有列中我都没有字符串,即字符和缺失值,或者 empty.I 使用 self.data.to_csv
[=25= 检查了这一点]
因为我是 pandas 和 python 的新手,请不要介意这是一个愚蠢的问题。我只想学习
请查看下面的简单代码,您可能会了解错误的原因。
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()
转换,否则清除即可。