编程技术文章分享与教程

网站首页 > 技术文章 正文

pandas 库函数方法集合--apply(pandas函数库手册)

hmc789 2024-11-16 20:56:20 技术文章 2 ℃

20231231星期日:

2023年最后一天:

# 知识点:apply:
# apply应用在Pandas中,其核心功能其实可以概括为一句话:我本身不处理数据,我们只是数据的搬运工。
# 理解apply核心在于明确两个环节:调度函数和作用对象
# 1,调度函数就是apply接收的参数,既可以是Python内置的函数,也支持自定义函数,或者匿名函数lambda。只要符合指定的作用对象(即是标量scalar,还是一行或一列series,亦或一个dataframe)即可。
# 2,作用对象则取决于调用apply的对象类型,具体来说:
#     a,一个Series对象调用apply时,数据处理函数作用于该Series的每个元素上,即作用对象是一个标量,实现从一个Series转换到另一个Series;
#     b,一个DataFrame对象调用apply时,数据处理函数作用于该DataFrame的每一行或者每一列上,即作用对象是一个Series,实现从一个DataFrame转换到一个Series上;
#     c,一个DataFrame对象经过groupby分组后调用apply时,数据处理函数作用于groupby后的每个子dataframe上,即作用对象还是一个DataFrame(行是每个分组对应的行;列字段少了groupby的相应列),实现从一个DataFrame转换到一个Series上。

# DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwargs)
# func:函数或 lambda 表达式,应用于每行或者每列
# axis:{0 or ‘index’, 1 or ‘columns’}, 默认为0
#     0 or ‘index’: 表示函数处理的是每一列
#     1 or ‘columns’: 表示函数处理的是每一行

import pandas as pd


# 总结:apply()可以应用的函数类型如下:
# df.apply(fun) # 自定义
# df.apply(max) # Python内置函数
# df.apply(lambda x:x*2) # lambda
# df.apply(np.mean) # NumPy等其他库的函数
# df.apply(pd.Series.first_valid_index) # Pandas自己的函数


# 按列进行apply:
df = pd.DataFrame([['liver', 'E', 89, 21, 24, 64],
                   ['Arry', 'C', 36, 37, 37, 57],
                   ['Ack', 'A', 57, 60, 18, 84],
                   ['Eorge', 'C', 93, 96, 71, 78],
                   ['Oah', 'D', 65, 49, 61, 86]
                   ],
                  columns=['name', 'team', 'Q1', 'Q2', 'Q3', 'Q4'])

# 案例一:
# 将name列中的文本全部转换成小写
df['name'] = df.name.apply(lambda x: x.lower())
print(df)
#     name team  Q1  Q2  Q3  Q4
# 0  liver    E  89  21  24  64
# 1   arry    C  36  37  37  57
# 2    ack    A  57  60  18  84
# 3  eorge    C  93  96  71  78
# 4    oah    D  65  49  61  86


# 案例二:
df = pd.DataFrame({'a':[1,2,1,2],'b':[3,4,5,6]})
print(df)
# ndf = df.apply(lambda x:x+2,axis=0)
# print(ndf)

# print(df.groupby('a').sum())
#     b
# a
# 1   8
# 2  10

# 案例三:
##针对某一列
# data = df['a'].apply(lambda x: 10 if x<3  else 0)
# df['a'] = df['a']+data
# print(df)
    # a  b
# 0  11  3
# 1  12  4
# 2  11  5
# 3  12  6


# 案例四:
##针对所有列
df = df.apply(lambda x:x+3,axis=0)
print(df)
#    a  b
# 0  4  6
# 1  5  7
# 2  4  8
# 3  5  9


# 案例五:自定义函数,且有带传参,args=(200,),传入的是元祖

import pandas as pd

data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Age': [25, 30, 35, 40],
    'Salary': [50000, 70000, 90000, 110000]
}

df = pd.DataFrame(data)
print(df)
      # Name  Age  Salary
# 0    Alice   25   50000
# 1      Bob   30   70000
# 2  Charlie   35   90000
# 3    David   40  110000
def double_salary(x,y):
    return 2 * x+y
# 对工资进行加倍,并加200:不加axis=0,默认是对列进行处理
df['Salary'] = df['Salary'].apply(double_salary,args=(200,))
print(df['Salary'])
# 0    100200
# 1    140200
# 2    180200
# 3    220200

print(df)
      # Name  Age  Salary
# 0    Alice   25  100200
# 1      Bob   30  140200
# 2  Charlie   35  180200
# 3    David   40  220200



标签列表
最新留言