如果想在Python的pandas中,将dataframe的两列的值合并起来处理,但是遇到 None
值是则替换为0,或者空值,使得不影响运行结果,可以使用以下方法:
方法1:使用 fillna
如果想要把整一行的空值处理成0再与相加,可以使用 fillna
方法,然后再进行合并。
import pandas as pd
# 创建一个示例DataFrame
df = pd.DataFrame({
'A': [1, 2, None, 4],
'B': [5, None, 7, None]
})
# 将None值替换为0
df['A'] = df['A'].fillna(0)
df['B'] = df['B'].fillna(0)
# 合并两列的值
df['Combined'] = df['A'] + df['B']
# 检查结果
print(df)
原来的df表:
运行后的结果:
这个方法在使用了fillna(0)的时候,会对原数据进行修改,原本是NaN的值,最后变成了0.
如果不想对原数据有修改,则可以使用下面的两种方法:
方法2:使用 apply
和 lambda
import pandas as pd
# 创建一个示例DataFrame
df = pd.DataFrame({
'A': [1, 2, None, 4],
'B': [5, None, 7, None]
})
# 使用apply和lambda函数合并两列的值,None值视为0
df['Combined'] = df.apply(lambda row: row['A'] if pd.isnull(row['B']) else row['B'] if pd.isnull(row['A']) else row['A'] + row['B'], axis=1)
# 检查结果
print(df)
运行的效果如下:
主要的代码部分:
df.apply(lambda row: row[‘A’] if pd.isnull(row[‘B’]) else row[‘B’] if
pd.isnull(row[‘A’]) else row[‘A’] + row[‘B’], axis=1)
如果看不懂这个表达式,可以看看下面的解释:
- pd.isnull(row[‘B’]):用于检查row[‘B’]中的值是否是None;
- row[‘A’] if pd.isnull(row[‘B’]) else … : 这个条件表达式的意思是,如果row[‘B’]是缺失值(pd.isnull(row[‘B’])为True),则计算的结果= row[‘A’]的值,否则继续判断下一个条件(两列的值相加);
3.df.apply(axis=1),axis=1参数告诉apply函数沿着行操作,即对DataFrame的每一行应用lambda表达式(约等于对每一行的for循环)
这个方法的问题是,如果需要合并处理的列比较多,写法就会比较长,需要在上面叠加 条件判断。
如果大家有更加简洁轻便的写法,欢迎下面评论呀~