python-3.x - 如何使用 python 为选定的列迭代 DataFrame?
问题描述
假设我有这样的示例代码
_d=pd.DataFrame([[1,2,3],[4,np.nan,6],[np.nan,np.nan,8]],columns=['x','y','z'])
现在,我有一个函数可以检查值并根据场景分配所需的值
def handling_nan(_d):
if _d['x']==1.0:
return 100
else:
return _d
当我在下面的代码中使用它时,
_result=_d.apply(lambda x:handling_nan(x))
_result
我收到错误
KeyError: ('x', '发生在索引 x')
更新一:
好吧,简而言之,我正在使用来自 kaggle.com 的数据集,即。Titanic: Machine Learning from Disaster在那个数据集中,我想介绍一个新的列,条件是这样的。
如果男性且年龄为 NaN,则插入男性的 mean() 年龄而不是 NaN;如果女性且年龄为 NaN,则插入女性总年龄的 mean() 而不是 NaN
解决方案
KeyError
在函数中遇到,因为apply()
数据帧上的方法假定axis=0
. 这意味着该函数将应用于每一列而不是每一行。要消除此错误,apply()
需要将调用替换为:
_result=_d.apply(lambda x:handling_nan(x), axis=1)
查看编辑,问题是NaNs
用数据集中的分组平均值替换。
这可以使用fillna()
和transform()
方法来完成,如下所示:
l = [["M", 30], ["M", 45], ["M", None], ["F", 76], ["F", 23], ["F", None]]
df = pd.DataFrame(l, columns=["sex", "age"])
df['age'] = df['age'].fillna(df.groupby("sex")['age'].transform('mean'))
这个答案有其他替代解决方案。
希望这可以帮助。
推荐阅读
- signalr - 使用 SignalR 时如何确保事件不会丢失
- python - matplotlib:条形图动画只能工作一次
- java - 从 AWS Lambda 连接到 MongoDB Atlas 需要很长时间
- django - 为什么我的 Django 密码没有被加密?
- swift - 如何使按钮正确缩放我的图像
- c++ - 有没有办法从 C++ 目录中找到最后修改的文件?
- sql - 如何以文本方式指示 SQL SELECT 中没有结果?
- javascript - 'fetch' Response.status 和 Response.ok,移动浏览器是否支持它们?
- wsdl - WSDLException faultCode=PARSER_ERROR - 使用 schemaLocation 时:MyService?xsd=myschema.xsd
- c - 我写了一个函数,它接受一个字符串,并将每个单词的最后一个字符大写,其余的小写。它有什么问题?