Python 对数据帧求和

Python 对数据帧求和,python,pandas,dataframe,pycharm,Python,Pandas,Dataframe,Pycharm,我正在PyCharm Community Edition 2016.3.2中运行Python 3.6和Pandas 0.19.2,并试图确保我的数据帧中的一组行相加为1 最初,我的数据框架如下所示: hello world label0 label1 label2 abc def 1.0 0.0 0.0 why not 0.33 0.34 0.33 hello

我正在PyCharm Community Edition 2016.3.2中运行Python 3.6和Pandas 0.19.2,并试图确保我的数据帧中的一组行相加为1

最初,我的数据框架如下所示:

 hello     world     label0    label1    label2
 abc       def       1.0       0.0       0.0
 why       not       0.33      0.34      0.33
 hello     you       0.33      0.38      0.15
我的发言如下:

# get list of label columns (all column headers that contain the string 'label')
label_list = df.filter(like='label').columns

# ensure every row adds to 1
if (df[label_list].sum(axis=1) != 1).any():
    print('ERROR')
不幸的是,这段代码不适合我。似乎发生的事情是,我没有对行求和,而是得到过滤数据中第一列的值。换句话说:
df[label\u list].sum(axis=1)
返回:

0     1.0
1     0.33
2     0.33
这应该是微不足道的,但我就是不知道我做错了什么。首先谢谢你的帮助

更新:

这是我筛选标签列后原始数据的摘录:

    label0 label1 label2 label3 label4 label5 label6 label7 label8
1    0.34    0.1    0.1    0.1    0.2    0.4    0.1    0.1    1.2
2    0.34    0.1    0.1    0.1    0.2    0.4    0.1    0.1    1.2
3    0.34    0.1    0.1    0.1    0.2    0.4    0.1    0.1    1.2
4    0.34    0.1    0.1    0.1    0.2    0.4    0.1    0.1    1.2
5    0.34    0.1    0.1    0.1    0.2    0.4    0.1    0.1    1.2
6    0.34    0.1    0.1    0.1    0.2    0.4    0.1    0.1    1.2
7    0.34    0.1    0.1    0.1    0.2    0.4    0.1    0.1    1.2
8    0.34    0.1    0.1    0.1    0.2    0.4    0.1    0.1    1.2
9    0.34    0.1    0.1    0.1    0.2    0.4    0.1    0.1    1.2

我上面的代码仍然不起作用,我仍然完全不知道为什么。当我在python控制台中运行代码时,一切都很好,但当我在Pycharm 2016.3.2中运行代码时,
label_data.sum(axis=1)
只返回第一列的值

对于我来说,使用您的示例数据是有效的。只需添加一个新列
check
来控制总和,即可复制您的样本:

In [3]: df
Out[3]: 
   hello world  label0  label1  label2
0    abc   def    1.00    0.00    0.00
1    why   not    0.33    0.34    0.33
2  hello   you    0.33    0.38    0.15

In [4]: df['check'] = df.sum(axis=1)

In [5]: df
Out[5]: 
   hello world  label0  label1  label2  check
0    abc   def    1.00    0.00    0.00   1.00
1    why   not    0.33    0.34    0.33   1.00
2  hello   you    0.33    0.38    0.15   0.86

In [6]: label_list = df.filter(like='label').columns

In [7]: label_list
Out[7]: Index([u'label0', u'label1', u'label2'], dtype='object')

In [8]: df[label_list].sum(axis=1)
Out[8]: 
0    1.00
1    1.00
2    0.86
dtype: float64

In [9]: if (df[label_list].sum(axis=1) != 1).any():
   ...:     print('ERROR')
   ...:     
ERROR

结果是我的数据类型不一致。我使用了
astype(float)
,事情就解决了

什么返回
label\u list=df.filter(比如class='label')。列
?列名似乎有问题,请通过
print(df.columns.tolist())
检查您的示例,它返回
['hello','world','label0','label1','label2']
标签列表
评估到
['label0','label1','label2']
。我的代码在上面描述的伪数据集上的Python控制台中工作得非常好。不过,我的原始数据集仍然存在漏洞。更改“label”变量的名称会产生各种奇怪的行为。是否可以通过
df.columns=['col1'、'col2'、'col3']
重新设计新列名?您是对的。代码在python控制台中运行良好。