【问题标题】:Calculate the mean in pandas while a column has a string当列有字符串时计算熊猫的平均值
【发布时间】:2021-12-15 18:12:34
【问题描述】:
我目前正在学习熊猫,我正在使用一个 imdb 电影数据库,其中一列是电影的持续时间。但是,其中一个值是“无”,所以我无法计算平均值,因为中间有这个字符串。我想将“无”更改为 = 0,但这会扭曲结果。如下代码所示。
dur_temp = duration.replace("None", 0)
dur_temp = dur_temp.astype(float)
descricao_duration = dur_temp.mean()
关于我应该怎么做才能不歪曲数据有什么想法吗?我还绘制了它,它变得更加清楚它是如何倾斜的。
【问题讨论】:
标签:
python
python-3.x
pandas
dataframe
mean
【解决方案1】:
您可以将“无”替换为numpy.nan,而不是使用 0。
这样的事情应该可以解决问题:
import numpy as np
dur_temp = duration.replace("None", np.nan)
descricao_duration = dur_temp.mean()
【解决方案2】:
如果您希望它适用于您的 pandas 系列中的任何字符串,您可以使用 pd.to_numeric:
pd.to_numeric(dur_temp, errors='coerce').mean()
这样所有不能转换成float的值都会被NaN替换,不管是哪个
【解决方案3】:
只需像这样按条件过滤
df[df['a']!='None'] #assuming your mean values are in column a
【解决方案4】:
使它们成为 np.NAN 值
我将其写为答案,因为我无法评论 df = df.replace('None ', np.NaN) 或 df.replace('None', np.NaN, inplace=True)
【解决方案5】:
你可以使用fillna(value=np.nan),如下图:
descricao_duration = dur_temp.fillna(value=np.nan).mean()
演示:
import pandas as pd
import numpy as np
dur_temp = pd.DataFrame({'duration': [10, 20, None, 15, None]})
descricao_duration = dur_temp.fillna(value=np.nan).mean()
print(descricao_duration)
输出:
duration 15.0
dtype: float64