Python 对数据帧求和
我正在PyCharm Community Edition 2016.3.2中运行Python 3.6和Pandas 0.19.2,并试图确保我的数据帧中的一组行相加为1 最初,我的数据框架如下所示: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
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控制台中运行良好。