自学内容网 自学内容网

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


原文地址:https://blog.csdn.net/weixin_54353942/article/details/142586635

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!