python - 将 lambda 函数应用于具有 NaN 值的数据帧?
问题描述
我正在尝试执行在具有保持一致变量的行之间更改的计算。当一行有不完整的数据时,如何使用这个 lambda 函数?
跟进这个问题:根据行间变化的计算创建一个新列?
#example
import pandas as pd
import numpy as np
conversion = [["a",5],["b",1],["c",10]]
conversion_table = pd.DataFrame(conversion,columns=['Variable','Cost'])
data1 = [[1,"2*a+b"],[2,"c"],[3,"2*c"],[4, np.NaN]]
to_solve = pd.DataFrame(data1,columns=['Day','Q1'])
#Desired dataframe:
desired = [[1,11],[2,10],[3,20]]
desired_table=pd.DataFrame(desired,columns=['Day','desired output'])
#Using lambda to map values does not work when NaN is present.
#Map values
mapping = dict(zip(conversion_table['Variable'], conversion_table['Cost']))
desired_table["solved"]=to_solve['Q1'].map(lambda x: eval(''.join([str(mapping[i]) if i.isalpha() else str(i) for i in x])))
当我的列不包含 NaN 值时,此代码有效,但当我的数据不完整时,我需要它来工作。我收到以下错误:'float' 对象不可迭代。我只想将 NaN 值留在原处并填写其余部分。
解决方案
desired_table["solved"]=to_solve['Q1'].map(lambda x: ..., na_action='ignore')
应该做你想做的。
In [6]: to_solve['Q1'].map(lambda x: eval(''.join([str(mapping[i]) if i.isalpha() else str(i) for i in x])), na_action='ignore')
Out[6]:
0 11.0
1 10.0
2 20.0
3 NaN
Name: Q1, dtype: float64
推荐阅读
- countdowntimer - 如何在 Phaser 游戏中添加倒数计时器
- sas - sas读取以空格为分隔符的文件
- r - 如何在ggplot2中自动获取绘图的中心位置
- android - 在 Instagram 等帖子中显示一张或多张照片
- python - 通过 python 将弹性数据转储到 csv 或任何 NOSQL
- typescript - 云函数 typescript snapshot.val() 类型安全
- vb.net - AcroPdfLib 临时旋转页面
- debugging - Intel VT-x:配置调试寄存器以从主机调试
- charts - Visio - 如何减小巨型流程图的大小
- django - Django:访问 CreateView 中的表单参数以传递给 get_success_url