python优化

本文探讨了Python在数据处理中的优化技巧,包括DataFrame的apply、agg、transform函数,以及如何使用filter、loc、iloc进行数据筛选。同时,介绍了map函数在处理列表和系列中的应用,以及利用query进行条件查询。这些方法对于提高机器学习和数据挖掘项目的效率至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

循环语句

apply

DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwargs)

axis=0 将func作用于dataframe每一列
axis=1将func作用于dataframe每一行

df = pd.DataFrame([[4, 9]] * 3, columns=['A', 'B'])
df.apply(np.sqrt)

agg

DataFrame.agg(func=None, axis=0, *args, **kwargs)

  • 在每列进行聚合,分别计算sum、min:
df = pd.DataFrame([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9],
                   [np.nan, np.nan, np.nan]],
                  columns=['A', 'B', 'C'])

df.agg(['sum', 'min'])
  • 在每列进行聚合不同的函数:
df.agg({'A' : ['sum', 'min'], 'B' : ['min', 'max']})
  • 在每列聚合不同的函数,并且重命名
df.agg(x=('A', max), y=('B', 'min'), z=('C', np.mean))
  • agg与groupby结合使用
df.groupby('A').agg(min)

transform

DataFrame.transform(func, axis=0, *args, **kwargs)
  • 对DataFrame每一列都加一
df = pd.DataFrame({'A': range(3), 'B': range(1, 4)})
df.transform(lambda x: x + 1)
  • 对series做聚合,多种聚合函数
s = pd.Series(range(3))
s.transform([np.sqrt, np.exp])
  • 结合groupby使用
df = pd.DataFrame({
    "Date": [
        "2015-05-08", "2015-05-07", "2015-05-06", "2015-05-05",
        "2015-05-08", "2015-05-07", "2015-05-06", "2015-05-05"],
    "Data": [5, 8, 6, 1, 50, 100, 60, 120],
})
df.groupby('Date')['Data'].transform('sum')

map

将函数function应用于可迭代对象每一元素

map(function, iterable, ...)
  • 将string替换成int,map()返回一个与传入可迭代对象大小一样的 map 对象,通过list将其转换为list
a = ['1','2','3','4']
list(map(int,a))
  • 对多个迭代对象使用map()
a = [1, 4, 6]
b = [2, 3, 5] 
map(lambda x, y: x*y, a, b)

List

[ 表达式 for 循环项 in 循环体 (if 条件) ]

数据筛选

filter

从可迭代对象中筛选元素

filter(function, iterable)
  • 根据函数筛选元素,若函数返回True则保留,否则剔除
def fun(variable):
    letters = ['a', 'e', 'i', 'o', 'u']
    if (variable in letters):
        return True
    else:
        return False
  
sequence = ['g', 'e', 'e', 'j', 'k', 's', 'p', 'r']
  
filtered = filter(fun, sequence)

loc iloc

at iat

at根据索引和列名字提取数,iat根据位置提取数。

注意,at只适用于直提取一个数的情况

df = pd.DataFrame([[0, 2, 3], [0, 4, 1], [10, 20, 30]],
                  index=[4, 5, 6], columns=['A', 'B', 'C'])
df.at[4, 'B']

query

DataFrame.query(expr, inplace=False, **kwargs)
  • 例子
df = pd.DataFrame({'A': range(1, 6),
                   'B': range(10, 0, -2),
                   'C C': range(10, 5, -1)})
df.query('A > B')                                     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值