【问题标题】:Convert type object column to float将类型对象列转换为浮点数
【发布时间】:2022-11-21 03:12:08
【问题描述】:

我有一个表,其中有一列名为“价格”。此列是对象类型。因此,它包含作为字符串的数字以及 NaN 或 ?人物。我想找到此列的平均值,但首先我必须删除 NaN 和 ?值并将其转换为浮点数

我正在使用以下代码:

import pandas as pd
import numpy as np
df = pd.read_csv('Automobile_data.csv', sep = ',')

df = df.dropna('price', inplace=True)
df['price'] = df['price'].astype('int')
df['price'].mean()

但是,这是行不通的。错误说:

ValueError: No axis named price for object type DataFrame

我怎么解决这个问题?

【问题讨论】:

  • 尝试 df = df.dropna(subset='price', inplace=True),它正在读取 'price' 作为轴参数
  • @CharlieBONS 现在它说:“TypeError:Index(...) 必须用某种集合调用,'price' 已通过”

标签: pandas dataframe jupyter-notebook


【解决方案1】:

编辑:在 pandas 1.3 及更低版本中,您需要将 subset=[col] 包裹在列表/数组中。在 verison 1.4 及更高版本中,您可以将单个列作为字符串传递。

你有几个问题:

  1. df.dropna() arguments 需要轴,然后是子集。轴是行/列,然后是要查看的子集。所以你希望这是(我认为)df.dropna(axis='rows',subset='price')
  2. 使用inplace=True让整个事情返回None,所以你设置了df = None。你不想那样做。如果您使用的是inplace=True,则您不会为其分配任何内容,整行将只是df.dropna(...,inplace=True)
  3. 不要使用inplace=True,只做作业。那是你应该使用df=df.dropna(axis='rows',subset='price')

【讨论】:

  • 我仍然收到 TypeError: Index(...) must be called with a collection of some kind, 'price' was passed
  • 哪一行代码给了你那个错误?并且您的数据框实际上有一个名为“价格”的列吗?你可以通过阅读它然后做一个print(df.columns)来检查
  • 价格是一栏,这一栏有“?”字符和数字作为字符串
  • 这些是列: Index(['symboling', 'normalized-losses', 'make', 'fuel-type', 'aspiration', 'num-of-doors', 'body-style', 'drive-wheels ','发动机位置','轴距','长度','宽度','高度','整备重量','发动机类型','气缸数','发动机尺寸', '燃油系统', '缸径', '冲程', '压缩比', '马力', '峰值转速', '城市-mpg', '高速公路-mpg', '价格'], dtype ='对象')
  • 哪一行代码给你错误?
猜你喜欢
  • 1970-01-01
  • 2018-12-09
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
  • 2021-12-11
  • 2021-08-11
  • 2023-04-09
  • 2021-05-24
相关资源
最近更新 更多