二进制化pandas dataframe列

时间:2018-01-27 03:00:30

标签: python pandas

mean radius mean texture    mean perimeter  mean area   mean smoothness mean compactness    mean concavity  mean concave points mean symmetry   mean fractal dimension  ... worst texture   worst perimeter worst area  worst smoothness    worst compactness   worst concavity worst concave points    worst symmetry  worst fractal dimension classification
0   17.99   10.38   122.80  1001.0  0.11840 0.27760 0.3001  0.14710 0.2419  0.07871 ... 17.33   184.60  2019.0  0.1622  0.6656  0.7119  0.2654  0.4601  0.11890 0
1   20.57   17.77   132.90  1326.0  0.08474 0.07864 0.0869  0.07017 0.1812  0.05667 ... 23.41   158.80  1956.0  0.1238  0.1866  0.2416  0.1860  0.2750  0.08902 0
2   19.69   21.25   130.00  1203.0  0.10960 0.15990 0.1974  0.12790 0.2069  0.05999 ... 25.53   152.50  1709.0  0.1444  0.4245  0.4504  0.2430  0.3613  0.08758 0
3   11.42   20.38   77.58   386.1   0.14250 0.28390 0.2414  0.10520 0.2597  0.09744 ... 26.50   98.87   567.7   0.2098  0.8663  0.6869  0.2575  0.6638  0.17300 0
4   20.29   14.34   135.10  1297.0  0.10030 0.13280 0.1980  0.10430 0.1809  0.05883 ... 16.67   152.20  1575.0  0.1374  0.2050  0.4000  0.1625  0.2364  0.07678 0

假设我有一个如上所示的pandas dataFrame。 我希望mean radius列的二值化(更改为0或1),如果该值高于12.0

我尝试的是

data_df.loc[data_df["mean radius"] > 12.0] = 0

但这给了我一个奇怪的结果。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

如果要将整列更改为1和0,可以稍微修改一下代码:

# 0 if greater than 12, 1 otherwise
data_df["mean_radius"] = (data_df["mean radius"] <= 12.0).astype(int)

如果您只是想将半径大于12的列更改为0(保持小于12的值不变):

# only change the values > 12
# this method is discouraged, see edit below
data_df[data_df["mean radius"] > 12.0]["mean radius"] = 0

修改

正如@jp_data_analysis指出的那样,chained indexing is discouraged。执行第二个操作的首选方法是多轴索引,此处从this answer下面再现:

# only change the values > 12
data_df.loc[data_df["mean radius"] > 12.0, "mean radius"] = 0

答案 1 :(得分:1)

同样指定列:

data_df.loc[data_df["mean radius"] > 12.0, "mean radius"] = 0

答案 2 :(得分:0)

使用mask

data_df["mean radius"]=data_df["mean radius"].mask(data_df["mean radius"] > 12.0,0)