【问题标题】:python : conversion a dataframe column with commas and $ into floatpython:将带有逗号和$的数据框列转换为浮点数
【发布时间】:2020-12-13 15:27:09
【问题描述】:

我正在尝试将数据框中的一列价格转换为浮点数,然后计算前 5 行的平均值。 首先我以这种方式成功地做到了:

import pandas as pd
import numpy as np
paris_listing = pd.read_csv("C:../.../.../paris_airbnb.csv")
stripped_commas = paris_listing["price"].str.replace(",", "")
stripped_dollars = stripped_commas.str.replace("$", "")
paris_listing["price"] = stripped_dollars.astype("float")
mean_price = paris_listing.iloc[0:5]["price"].mean()
print (mean_price)

但我尝试创建一个函数并将其应用于数据框,但它不起作用

def conversion_price(price_conv):
    price_conv = price_conv.str.replace(",", "")
    price_conv = price_conv.str.replace("$", "")
    price_conv = price_conv.astype("float")
    price_mean = price_conv.iloc[0:5].mean()
paris_listing["converted_price"] = paris_listing["price"].apply(conversion_price)

【问题讨论】:

  • 您的具体错误是什么?请提供所有相关详细信息,如果可行,甚至包括 paris_listing.head() 的输出。
  • 这是一个pandas 的问题,与machine-learning 无关(标签已编辑)。
  • 如果你想分配给其他列然后在函数中你fogot return price_conv

标签: python pandas dataframe type-conversion


【解决方案1】:

你能不能试试下面的函数,而不是第二行和第三行函数

price_conv = float(price_conv.replace("$", ""))

【讨论】:

  • 谢谢你的回答,好吧,我的目标是创建一个函数来转换所有行,然后计算前5行的平均值
【解决方案2】:

您的问题有点令人困惑,您希望所有行都具有前 5 个价格的平均值还是后 5 个价格的平均值?无论如何,这是计算接下来 5 个价格的平均值的代码。 get_mean 函数会返回 mean(present_index to present_index+5)。

def get_mean(row):
    
    index = df[df == row].dropna().index
    if index+4 in df.index:
        index_list = range(index,index+5)
        price_mean = np.mean([df.loc[index,'price'] for index in index_list])
        return price_mean
    return np.NaN

paris_listing['price'] = paris_listing['price'].str.replace(r'[$\,]','').astype('float')
paris_listing["converted_price"] = paris_listing.apply(get_mean,axis = 1)

以下语句可用于求前 5 行的平均值

mean = df.price[0:5].mean()

【讨论】:

  • 我建议将所需的输出和 df.head() 附加到您的问题中。
  • 谢谢你的回答,好吧,我的目标是创建一个函数来转换所有行,然后计算前 5 行的平均值。我会试试你的代码,然后把 head() 还给你
  • 当您使用它时,请同时附上预期的输出。
  • 签出新的编辑,我想这会解决你的问题。
【解决方案3】:

感谢您的帮助 :) 我试过这个功能,效果很好

def convert_price (df):
    df = df.replace("$", "")
    df = df.replace(",", "")
    df = float(df)
    
    return df
converted_price = paris_listing["price"].apply(convert_price)
paris_listing["price"].head()
converted_price.head()

我得到了这个结果:

1956     80.0
3735     67.0
6944     36.0
2094    120.0
2968     60.0
Name: price, dtype: float64
1956     80.0
3735     67.0
6944     36.0
2094    120.0
2968     60.0
Name: price, dtype: float64

否则我想计算系列的平均值(结果)但是当我使用时

mean_price = df.mean()

我得到这个错误: AttributeError: 'float' 对象没有属性 'mean'

【讨论】:

  • 您所要做的就是通过以下方式将价格列转换为浮点数:df['price'] = df['price'].str.replace(r'[$\,]','').astype('float'),然后您可以通过以下方式计算前 5 行的平均值:mean = df['price'].iloc[0:5].mean()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 2021-04-19
  • 1970-01-01
相关资源
最近更新 更多