我有 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 数据框列的中位数。
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)