首页 > 解决方案 > python:将带有逗号和 $ 的数据框列转换为浮点数

问题描述

我正在尝试将数据框中的一列价格转换为浮点数,然后计算前 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)

标签: pythonpandasdataframetype-conversion

解决方案


您的问题有点令人困惑,您是否希望所有行都具有前 5 个价格的平均值或后 5 个价格的平均值?无论如何,这是计算接下来 5 个价格的平均值的代码。get_mean 函数将返回均值(present_index 到 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()


推荐阅读