Pandas -----------------------基础知识(四)
自定义函数
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 == 0df[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 arg1else: 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['价格'] += 2000return df_objcopy_df = copy_df.apply(change_price,axis=1) copy_df
# 目标2: 包租公将所有房租 涨 1000 块 (列处理)def change_price_2(df_obj):if df_obj._name == '价格':df_obj += 1000return df_objcopy_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 * 3df = 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