如何使用pandas库在python中对浮点值进行分类

2024-10-01 11:27:54 发布

您现在位置:Python中文网/ 问答频道 /正文

`进口熊猫 导入numpy

#importing the dataset
data=pandas.read_csv('gapminder.csv',low_memory=False)

#setting variables to be worked with to numeric
data['urbanrate']=data['urbanrate'].convert_objects(convert_numeric=True)
data['femaleemployrate']=data['femaleemployrate'].convert_objects(convert_numeric=True)
data['lifeexpectancy']=data['lifeexpectancy'].convert_objects(convert_numeric=True)

print("Count for urbanrate")
chk8=data['urbanrate'].value_counts(sort=False,dropna=False)
print(chk8)

sub1=data[['urbanrate','femaleemployrate','lifeexpectancy']]
print (sub1.head(25))

===========================================================================
def urban (row):
      if (row['urbanrate']<25.0):
          return 1
      if (data[['urbanrate']>=25.0 & data['urbanrate']<75.0]):
         return 2
      if (data['urbanrate']>75.0):
         return 3
sub1['urban']=sub1.apply(lambda row: urban (row),axis=1)
print (sub1.head(25))
============================================================================`

我想将urbanrate的所有值(都是浮点数,比如24.5688.9877.65)分为3个不同的类别(一个是<25,另一个是>=25 and <75,最后一个是>=75),并将这些值存储在一个新变量中(比如urban)。我该怎么做?我已经给了我的密码。我执行了它,它给我的错误是:

TypeError: ('cannot compare a dtyped [float64] array with a scalar of type [bool]', 'occurred at index 1'))

请帮帮我


Tags: falsetrueconvertdatareturnifobjectsrow
2条回答

我想你可以用^{}

import pandas as pd

df = pd.DataFrame({'urbanrate':[10,20,25,30,40,75,80,100]})
print (df)
   urbanrate
0         10
1         20
2         25
3         30
4         40
5         75
6         80
7        100

bins = [0, 24.999, 74.999, 1000]
group_names = [1,2,3]
df['urban'] = pd.cut(df['urbanrate'], bins, labels=group_names)
print (df)
   urbanrate urban
0         10     1
1         20     1
2         25     2
3         30     2
4         40     2
5         75     3
6         80     3
7        100     3

使用3个面具:

sub1.loc[sub1['urbanrate']<25.0,'urban'] = 1
sub1.loc[(sub1['urbanrate']>=25.0) & (sub1['urbanrate']<75.0),'urban'] = 2
sub1.loc[sub1['urbanrate']>75.0,'urban'] = 3

您可以屏蔽符合布尔条件的行,并以矢量化的方式设置所有行,您尝试的操作失败的原因是:

^{pr2}$

在这里,您试图将数组与标量值进行比较以生成标量布尔值,但这不会起作用,另外,尽管您使用了正确的运算符将条件括在括号中()

if (data[['urbanrate']>=25.0) & (data['urbanrate']<75.0]):
    return 2

另外,您的函数不一致,您调用了apply并传递了axis=1,这意味着您正在尝试对行值进行操作,而您的第一个条件没有问题:

if (row['urbanrate']<25.0):
          return 1

但是在随后的条件下,你测试的是整个{},这是完全不同的

如果您执行以下操作,它会起作用:

def urban (colData):
    if colData<25.0:
        return 1
    if (colData>=25.0) & (colData<75.0]):
       return 2
    if (colData>75.0):
       return 3
sub1['urban']=sub1['urbanrate'].apply(urban)

这里不需要按行操作,可以将整个列/系列作为参数传递给函数

相关问题 更多 >