Pandas -----------------------基础知识(四)

自定义函数

Series

加载数据

import pandas as pd
df = pd.DataFrame({'Age': [20, 25, 30, 35, 40]})
df

# 目标: 让 Age 列 的每个元素 + num1 + num2
def add_nums(x,num1,num2):
    return x + num1 + num2
df['Age'].apply(add_nums,num1 =2,num2 =3)
法二 

df['Age'].apply(lambda x ,num1 ,num2 : x+num1+num2 , num1 =2,num2 =3)

# 目标: 输出 偶数

加载数据

df = pd.DataFrame({'vals': [15, 20, 33, 40, 50]})

def oushu(x):
    return x %2 == 0

df[df['vals'].apply(oushu)]
法二
df[df['vals'].apply(lambda x : x %2 == 0)]

案例

加载数据

import pandas as pd

# 加载数据
df = pd.read_csv('./data/b_LJdata.csv')

copy_df = df.head().copy()
copy_df
如果区域 是 天通苑租房 就改成 昌平区, 否则改成其他区
法一
def change_area(x):
    if x == '天通苑租房':
        return '昌平区'
    else: 
        return '其他区'
copy_df['区域']=copy_df['区域'].apply(change_area)
copy_df

法二
copy_df = df.head().copy()
def change_area(x,arg1,arg2):
    if x == '天通苑租房':
        return arg1
    else: 
        return arg2
copy_df['区域'] =copy_df['区域'].apply(change_area, arg1 ='昌平区',arg2 ='其他区')
copy_df

法三
copy_df = df.head().copy()

copy_df['区域'] = copy_df['区域'].apply(lambda x,arg1,arg2:arg1 if x=='天通苑租房' else arg2 ,args=('昌平区','其他区'))
copy_df

 df

axis=0  表示 列处理  
axis=1  表示 行处理
# 目标: 获取每一列的和
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df
法一
def sum_col(df):
    return df.sum(axis=0)
re = df.apply(sum_col)
re

法二
re = df.apply(lambda df: df.sum(), axis=0)
re

# 目标1: 链家将 天通苑租房 提高 2000 块 (行处理)
def change_price(df_obj):
    if df_obj['区域'] == '天通苑租房':
        df_obj['价格'] += 2000
    return df_obj
        
        
copy_df = copy_df.apply(change_price,axis=1)
copy_df

# 目标2: 包租公将所有房租 涨 1000 块 (列处理)
def change_price_2(df_obj):
    if df_obj._name  == '价格':
        df_obj += 1000
    return df_obj
        
copy_df = copy_df.apply(change_price_2,axis=0)        
copy_df

单元格自定义

 加载数据

import pandas as pd

# 创建一个示例数据框
data = {'Col1': [10, 20, 30],
        'Col2': [40, 50, 60],
        'Col3': [70, 80, 90]}
df = pd.DataFrame(data)
df
法一:
def fn(x):
    return x * 3

df = df.applymap(fn)

df

法二:
df = df.applymap(lambda df:df*3)
df

案例

# 目标: 只要值是 '2室1厅' 就改成 '3室2厅'(函数版)

加载数据

import pandas as pd

# 加载数据
df = pd.read_csv('./data/b_LJdata.csv')

copy_df = df.head().copy()
copy_df

法一:
def fn(x):
    if x == '2室1厅':
        return '3室2厅'
    else: return x
copy_df = copy_df.applymap(fn)
copy_df

法二:
copy_df = df.head().copy()
copy_df = copy_df.applymap(lambda x:'3室2厅' if x == '2室1厅' else x)
copy_df

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值