我正在创建一个函数,该函数将评估数据帧中的两个条件,并在遇到NaN的情况下将输入的一系列预定返回值传递给该数据帧。我要拥有的第一个条件是检查(看一眼)一列的值是否为NaN,然后检查另一列以查看已分配ID的键(1、2、3等) 。最终目标是在函数上使用.apply方法,以将函数返回原始数据帧的值填充到NaN值中,或单独保留现有值(如果存在)。让我挂断电话的是,这是我第一次编写类似这样的东西以在数据帧中调用,而我在控制流中遇到分配问题。
这是使用python 3.6。我尝试过下面的多种形式,但是在尝试将函数应用于数据框时,所有内容始终给我相同的类型错误。这不是实际的数据框架,但我很快就向您简要介绍了我所遇到的问题。
该函数显然有问题,但是理想情况下结果会将NaN值更新为40值
到目前为止,我已经尝试过以我认为有意义的所有方式对其进行修改,以使其能够遍历数据框。
import pandas as pd
import numpy as np
frame = {'key' : [1,2,3,4,5],
'height' : [70, 68, 74, 67, 72],
'age' : [29,45,'N/A',51,34]}
frame = pd.DataFrame(frame)
frame.replace('N/A',np.nan)
def age (x):
if (x['age'].isnull()) & (x['key'] == 3):
return x.replace(np.nan, 40)
else:
return x
result = frame.apply(age)
Here's a snapshot of the dataframe that I would like to amend
答案 0 :(得分:0)
如果您真的想使用自定义功能并应用,可以按以下说明解决问题的方法。
import pandas as pd
import numpy as np
import math
frame = {'key' : [1,2,3,4,5],
'height' : [70, 68, 74, 67, 72],
'age' : [29,45,'N/A',51,34]}
frame = pd.DataFrame(frame)
frame = frame.replace('N/A',np.nan)
#function modified to compare the numpy float value with nan, math library is used here
def age(row):
if (math.isnan(row['age'])) & (row['key'] == 3):
return row.replace(np.nan, 40)
else:
return row
result = frame.apply(age, axis=1) #here axis=1 is passing single row at a time to the function
输入数据框:
key height age
1 70 29.0
2 68 45.0
3 74 NaN
4 67 51.0
5 72 34.0
结果数据框:
key height age
1.0 70.0 29.0
2.0 68.0 45.0
3.0 74.0 40.0
4.0 67.0 51.0
5.0 72.0 34.0
希望对您有所帮助,您可以根据需要修改函数并修改列的数据类型。