无法将对象转换为浮点

2024-10-05 10:46:04 发布

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

Code                    object
Area_name               object
Inner/_Outer_London     object
NEET                    object
Score                   object
Noparents               object
Familyoffwork          float64
TeensPragnancy          object
dtype: object
  • 我尝试了几种从对象数据类型转换为数值类型的方法,但仍然出现错误
school_df2['foreign'] = school_df2.foreign.astype(float)
    Output: AttributeError: 'NoneType' object has no attribute 'foreign'

df1['foreign'] = school_df2['foreign'].str.astype(float)
    Output: TypeError: 'NoneType' object is not subscriptable

school_df2=pd.to_numeric(school_df2['foreign'], errors='coerce')
    Output: TypeError: 'NoneType' object is not subscriptable

school_df2['foreign'] = pd.to_numeric(school_df2['foreign'],errors='coerce')
    Output: TypeError: 'NoneType' object is not subscriptable

import numpy as np
np.array(['foreign','NEET','Score', 'Noparents', 'Familyoffwork','TeensPragnancy' ]).astype(np.float)
   Output: ValueError: could not convert string to float: 'foreign'
  • 我的代码的开头如下所示:
!wget -q -O 'london_data.csv' https://data.london.gov.uk/download/london-borough-profiles/c1693b82-68b1-44ee-beb2-3decf17dc1f8/london-borough-profiles.csv
print('Data downloaded!')

london_df = pd.read_csv('london_data.csv', encoding= 'unicode_escape')
london_df.head()

ldf=london_df.drop(['Turnout_at_2014_local_elections','Male_life_expectancy,_(2012-14)', 'Female_life_expectancy,_(2012-14)', 'Proportion_of_seats_won_by_Lib_Dems_in_2014_election', 'Proportion_of_seats_won_by_Labour_in_2014_election', 'Proportion_of_seats_won_by_Conservatives_in_2014_election', 'Political_control_in_council', 'Mortality_rate_from_causes_considered_preventable_2012/14', 'People_aged_17+_with_diabetes_(%)', 'Childhood_Obesity_Prevalance_(%)_2015/16', 'Ambulance_incidents_per_hundred_population_(2014)'], axis = 1)
ldf.head()


school_df = ldf [['Code', 'Area_name', 'Inner/_Outer_London','Proportion_of_16-18_year_olds_who_are_NEET_(%)_(2014)', 'Achievement_of_5_or_more_A*-_C_grades_at_GCSE_or_equivalent_including_English_and_Maths,_2013/14', 'Rates_of_Children_Looked_After_(2016)', '%_children_living_in_out-of-work_households_(2015)', 'Teenage_conception_rate_(2014)']]
school_df

school_df = school_df.rename(columns={'Proportion_of_16-18_year_olds_who_are_NEET_(%)_(2014)': 'NEET', 'Achievement_of_5_or_more_A*-_C_grades_at_GCSE_or_equivalent_including_English_and_Maths,_2013/14': 'Score','Rates_of_Children_Looked_After_(2016)': 'Noparents', '%_children_living_in_out-of-work_households_(2015)': 'Familyoffwork', 'Teenage_conception_rate_(2014)': 'TeensPragnancy'})
school_df

school_df1=school_df.drop(school_df.tail(5).index,inplace=True)
school_df1
school_df2=school_df.drop(school_df.head(1).index,inplace=True)
school_df2

school_df2.corr()
             Familyoffwork
Familyoffwork   1.0

有人能告诉我为什么我会犯这个错误吗


Tags: ofindfoutputobjectnotfloatdf2
2条回答

修复数值列以正确应用astype

  • school_df
display(school_df.head())

|    | Code      | Area_name            | Inner/_Outer_London   | NEET   |   Score |   Noparents |   Familyoffwork | TeensPragnancy   |
| -:|:     |:          -|:           |:   -|    :|      :|        :|:        -|
|  0 | E09000001 | City of London       | Inner London          | .      |    78.6 |         101 |             7.9 | .                |
|  1 | E09000002 | Barking and Dagenham | Outer London          | 5.7    |    58   |          69 |            18.7 | 32.4             |
|  2 | E09000003 | Barnet               | Outer London          | 2.5    |    67.3 |          35 |             9.3 | 12.8             |
|  3 | E09000004 | Bexley               | Outer London          | 3.4    |    60.3 |          46 |            12.6 | 19.5             |
|  4 | E09000005 | Brent                | Outer London          | 2.6    |    60.1 |          45 |            13.7 | 18.5             |

display(school_df.tail())

|    | Code      | Area_name      |   Inner/_Outer_London | NEET   | Score   | Noparents   |   Familyoffwork | TeensPragnancy   |
| -:|:     |:       -|           :|:   -|:    |:      |        :|:        -|
| 33 | E13000001 | Inner London   |                   nan | 3.3    | .       | 56          |             0.8 | 23.1             |
| 34 | E13000002 | Outer London   |                   nan | 3.4    | .       | 47          |            12.2 | 20.7             |
| 35 | E12000007 | London         |                   nan | 3.4    | 61.8    | 51          |            14.4 | 21.5             |
| 36 | E92000001 | England        |                   nan | 4.7    | 56.8    | 60          |            14   | 22.8             |
| 37 | K02000001 | United Kingdom |                   nan | .      | .       | .           |            18.2 | .                |

# replace the '.'
school_df.replace('.', np.nan, inplace=True)

# set the type
school_df = school_df.astype({'NEET': float, 'Score': float, 'Noparents': float, 'Familyoffwork': float, 'TeensPragnancy': float})

# get corr
school_df.corr()

|                |      NEET |     Score |   Noparents |   Familyoffwork |   TeensPragnancy |
|:       -|     :|     :|      :|        :|        -:|
| NEET           |  1        | -0.122794 |    0.192059 |        0.116928 |         0.153306 |
| Score          | -0.122794 |  1        |   -0.238971 |       -0.736165 |        -0.764346 |
| Noparents      |  0.192059 | -0.238971 |    1        |        0.404303 |         0.725914 |
| Familyoffwork  |  0.116928 | -0.736165 |    0.404303 |        1        |         0.500839 |
| TeensPragnancy |  0.153306 | -0.764346 |    0.725914 |        0.500839 |         1        |

另外

  • 以下是不正确的分配原因
school_df1 = school_df.drop(school_df.tail(5).index, inplace=True)
school_df2 = school_df.drop(school_df.head(1).index, inplace=True)

正确的方法1:

school_df1 = school_df.drop(school_df.tail(5).index)
school_df2 = school_df1.drop(school_df1.head(1).index)

正确的方法2:

school_df.drop(school_df.tail(5).index, inplace=True)
school_df.drop(school_df.head(1).index, inplace=True)

您的问题中描述了三种类型的错误:

  1. AttributeError是由于school_df2的值为None
  2. TypeError是由于school_df2的值为None
  3. ValueError是由于试图将'foreign'转换为float

那么school_df2{}为什么是school_df2?代码使用dataframe.drop()的就地版本。这将修改dataframe的位置。代码需要设置inplace=False以执行该操作并返回新的数据帧

school_df2=school_df.drop(school_df.head(1).index, inplace=False)

现在AttributeError可以通过理解np.array.astype()的工作原理来解决

此代码:

np.array(['foreign','NEET','Score', 'Noparents', 'Familyoffwork','TeensPragnancy' ]).astype(np.float)

在功能上与此等效:

[float(item) for item in 
['foreign','NEET','Score', 'Noparents', 'Familyoffwork','TeensPragnancy']]

每次尝试将数组的每个元素强制转换为float,但显然float('foreign')将失败,因为没有将该str映射为float

相关问题 更多 >

    热门问题