无法获取数据帧。['col1].median() 来忽略空值

问题描述 投票:0回答:1

我有 pandas 数据框 df1 和“评级”列。我需要该列的中位数。该列包含缺失值的字符串“Not Give”。我已经使用以下行替换了“未给出”值 Numpy 的 np.nan 和 None:

df1.loc[df1['rating'] == 'Not given', 'rating'] = np.nan`
-OR-
df1.loc[df1['rating'] == 'Not given', 'rating'] = None`
and verified the results. Then tried to get the median of df1['rating'] using this line:
mrat_y =df1['rating'].median( skipna = True) 

我使用空替代得到的错误消息是:

{File "C:\Users\fnaso\PycharmProjects\pythonProject\.venv\Lib\site-packages\pandas\core\nanops.py", line       787, in nanmedian
    raise TypeError(f"Cannot convert {values} to numeric")
TypeError: Cannot convert [nan nan '5' ... nan '5' nan] to numeric 
} 

因此,替换不是有效的空值,或者中位数(skipna = True)按我的预期或(最有可能)工作。

这适用于 W3Schools_Tryit_Editor。

我期望找到具有 float8 和 Null 值的 panda 数据框列的中位数。

python pycharm
1个回答
0
投票

rating
列的类型是字符串('5'、'3'、'未给出'...),需要将其转换为数字。

您可以使用

pd.to_numeric

import pandas as pd
df = pd.DataFrame({'rating': ['5', 'Not given', '3', '4', 'Not given', '5']})

df["rating"] = pd.to_numeric(df.rating, errors='coerce')
df

注意:使用

coerce
表示错误意味着无效解析将被设置为
NaN
(如“未给出”)。

输出:

index,rating
0,5.0
1,NaN
2,3.0
3,4.0
4,NaN
5,5.0

然后就可以计算中位数了:

df['rating'].median( skipna = True) 
© www.soinside.com 2019 - 2024. All rights reserved.