pandas if else语句(数据替换)

本文介绍了如何使用pandas的replace方法高效地替换数据。包括替换全部值、部分值、指定数值、使用正则表达式替换以及处理缺失值。通过实例详细解释了各种替换操作,强调了inplace参数的使用以及如何针对特定列进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.if-then / if-then-else用在一个数据帧上:

(原文链接:https://blog.youkuaiyun.com/tcy23456/article/details/85460709)
(可进入该博主的主页,查看更多pandas其他功能资料)
# 实例1:if-then-else
df = pd.DataFrame({'A': [10,11,12],'B': [20,21,22],'C': [30, 31, -32]})

df.loc[df.A >= 11, 'B'] = -1        #if-then在一列上(对一列进行修改值
df.loc[df.A >= 5, ['B', 'C']] = 88  #if-then分配给2列
df.loc[df.A < 12, ['B', 'C']] = 99  # 添加不同逻辑另一行,以执行-else

#df              result1          result2          result3
   A   B   C        A   B   C       A    B   C       A    B   C
0  10  20  30    0  10  20  30    0  10  88  88    0  10  99  99
1  11  21  31    1  11  -1  31    1  11  88  88    1  11  99  99
2  12  22 -32    2  12  -1 -32    2  12  88  88    2  12  88  88

# 实例2:where 矢量化if else

df_bool = pd.DataFrame({'A': [True] * 3, 'B': [False] * 3, 'C': [True, False,True] })

df.where(df_bool, -66)#根据bool值选择
df['logic'] = np.where(df['A'] > 11, 'high', 'low')

#df              result4          result5
   A   B   C       A    B   C       A   B   C    logic
0  10  99  99    0  10 -66  99    0  10  99  99   low
1  11  99  99    1  11 -66 -66    1  11  99  99   low
2  12  88  88    2  12 -66  88    2  12  88  88   high

# 实例3:
s1=pd.Series([11,np.nan,13,14,np.nan])
s2=pd.Series([np.nan,22,23,24,25])
np.where(pd.isnull(s1),s2,s1)#array([11., 22., 13., 14., 25.])

df1=pd.DataFrame({'a':[11,np.nan,13,14,np.nan],'b':[np.nan,22,23,24,25]})
df2=pd.DataFrame({'a':[np.nan,42,43,np.nan,45],'b':[31,np.nan,33,34,35]})
pd.DataFrame(np.where(pd.isnull(df1),df2,df1),columns=list('ab'))

# df1                     df2              result                          
    a        b            a     b                 a     b
0  11.0   NaN        0   NaN   31.0        0  11.0  31.0  
1  NaN   22.0        1   42.0  NaN         1  42.0  22.0
2  13.0  23.0        2   43.0  33.0        2  13.0  23.0
3  14.0  24.0        3   NaN   34.0        3  14.0  24.0
4  NaN   25.0        4   45.0  35.0        4  45.0  25.0

============================================================
2.if-then / if-then-else用在2个数据帧上:

实例1:# 若df1>=df2选择df1中数据,否则选择df2中的数据

df1 = pd.DataFrame({'A': [10, 11], 'B': [12, 13]})
df2 = pd.DataFrame({'A': [21, -22], 'B': [23, -24]})

result1=df1[df1>=df2].append(df2[df1<df2]).dropna()
result2=df1[df1.A>df2.B]
result3=df1[df1.A!=11]

# df1        df2          result1   result2    result3
    A    B       A    B      A   B     A   B       A  B
0  10  12    0  21  23    0 21 23   1 11 13    0 10 12
1  11  13    1 -22 -24    1 11 13

============================================================

二,pandas的替换和部分替换(replace)
原文链接:https://www.jianshu.com/p/2557a805211f

在处理数据的时候,很多时候会遇到批量替换的情况,如果一个一个去修改效率过低,也容易出错。replace()是很好的方法。

在这里插入图片描述

                                 源数据

1、替换全部或者某一行

replace的基本结构是:df.replace(to_replace, value) 前面是需要替换的值,后面是替换后的值。

例如我们要将南岸改为城区:

在这里插入图片描述

                           将南岸改为城区

这样Python就会搜索整个DataFrame并将文档中所有的南岸替换成了城区(要注意这样的操作并没有改变文档的源数据,要改变源数据需要使用inplace = True)。

在这里插入图片描述

                        使用inplace = True更改源数据

由于南岸只有城市一列具有相同值,使用起来比较方便。

但是如果我们要改变表1Lon里的某个数据,而不改变Longitude的数据要怎么做呢?

在这里插入图片描述

                          改变指定的列的数据

所以只想替换部分数据的时候并且要写入源数据就需要指定inplace。

在上面的操作只改变了表1Lon的数据,其它列的数据并没有被替换,而且在替换后的结果不需要我们再和源数据进行合并操作,可以直接体现在源数据中。

2、替换指定的某个或指定的多个数值(用字典的形式)

在这里插入图片描述

                    只改变指定的值

这个很好理解,就是字典里的建作为原值,字典里的值作为替换的新值。

当然,我们也可是使用列表的形式进行替换:df.replace([‘A’,‘29.54’],[‘B’,100])

在这里插入图片描述

                      用列表的形式进行替换

还有如果想要替换的新值是一样的话,我们还可以这样做:

在这里插入图片描述

           替换的新值一样时

部分替换和替换某个值结合使用的话就可以替换单个列的数值:

在这里插入图片描述

           替换单个列的数值

3、使用正则表达式替换

正则表达式很强大,能够让我们实现一次替换很多很多个不同的值:

在这里插入图片描述

                           源数据

在这里插入图片描述

                          正则表达式没有指定regex =True

在这里插入图片描述

               正则表达式指定regex =True

使用正则表达式的时候记得后面加 regex=True参数。

有图中我们可以看到只要包含有大写的英文字母的数据都被替换了,如果我们要写入源数据还需要指定inpla = True。

在这里插入图片描述

                        指定列替换数据

当需要将缺失值替换掉的时候,我们可以考虑直接只用fillna(),功能更强大,这个前面已经有说过了。

在某些情况下,如果我们只需要某个数据的部分内容,我们该怎么操作呢?

比如要把变电站都改为transformer_substation,或者是把Latitude列的前面的ab改为AB:

在这里插入图片描述

                          指定列更改替换部分字符

在这里插入图片描述

                          指定列更改替换部分字符

需要注意的时更好指定列的时候,使用str.replace时不能使用inplace = True参数,因此需要改成赋值,赋值的时候不要忘了是列的赋值而不是整个表格的赋值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值