自定义函数
Series
加载数据
import pandas as pd df = pd.DataFrame({'Age': [20, 25, 30, 35, 40]}) df
# 目标: 让 Age 列 的每个元素 + num1 + num2def 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