我正在尝试在Pandas中编写一个lambda函数,检查Col1是否为Nan,如果是,则使用另一列的数据。我无法获得正确编译/执行的代码(如下所示)。
import pandas as pd
import numpy as np
df=pd.DataFrame({ 'Col1' : [1,2,3,np.NaN], 'Col2': [7, 8, 9, 10]})
df2=df.apply(lambda x: x['Col2'] if x['Col1'].isnull() else x['Col1'], axis=1)
有没有人对如何使用lambda函数编写这样的解决方案有任何好主意,或者我是否超出了lambda的能力?如果没有,你有其他解决方案吗?感谢。
答案 0 :(得分:10)
如果标量为$sqlFindId = "SELECT language_id
FROM language_skill
WHERE person_id = :person_id AND language_learning = :language_learning AND language_id = :language_id";
$NoEmptyArray_language_id = "";
foreach ($teachArray as $dataTeach)
{
$query = $handler->prepare($sqlFindUser);
$query->bindValue(':person_id', $_SESSION['person_id']);
$query->bindValue(':language_learning', 1);
$query->bindValue(':language_id', $dataTeach);
$query->execute();
$language_id = $query->fetchAll(PDO::FETCH_COLUMN, 0);
if ( count( $language_id ) != 0 ) {
$NoEmptyArray_language_id .= $language_id;
}
}
print_r($NoEmptyArray_language_id);
,则需要pandas.isnull
进行检查:
NaN
但更好的是使用Series.combine_first
:
df = pd.DataFrame({ 'Col1' : [1,2,3,np.NaN],
'Col2' : [8,9,7,10]})
df2 = df.apply(lambda x: x['Col2'] if pd.isnull(x['Col1']) else x['Col1'], axis=1)
print (df)
Col1 Col2
0 1.0 8
1 2.0 9
2 3.0 7
3 NaN 10
print (df2)
0 1.0
1 2.0
2 3.0
3 10.0
dtype: float64
Series.update
的另一个解决方案:
df['Col1'] = df['Col1'].combine_first(df['Col2'])
print (df)
Col1 Col2
0 1.0 8
1 2.0 9
2 3.0 7
3 10.0 10
答案 1 :(得分:4)
假设您确实有第二列,那就是:
df = pd.DataFrame({ 'Col1' : [1,2,3,np.NaN], 'Col2': [1,2,3,4]})
这个问题的正确解决方案是:
df['Col1'].fillna(df['Col2'], inplace=True)
答案 2 :(得分:0)
您需要使用np.nan()
#import numpy as np
df2=df.apply(lambda x: 2 if np.isnan(x['Col1']) else 1, axis=1)
df2
Out[1307]:
0 1
1 1
2 1
3 2
dtype: int64
答案 3 :(得分:0)
我在熊猫0.24.2内使用
df.apply(lambda x: x['col_name'] if x[col1] is np.nan else expressions_another, axis=1)
因为pd.isnull()不起作用。
在我的工作中,我发现了以下现象,
无运行结果:
df['prop'] = df.apply(lambda x: (x['buynumpday'] / x['cnumpday']) if pd.isnull(x['cnumpday']) else np.nan, axis=1)
结果存在:
df['prop'] = df.apply(lambda x: (x['buynumpday'] / x['cnumpday']) if x['cnumpday'] is not np.nan else np.nan, axis=1)