lambda function python
In Python, a lambda function is a small anonymous function defined with the lambda
keyword. It can take any number of arguments, but can only have one expression. The expression is evaluated and returned when the lambda function is called. Lambda functions are often used for constructing function objects in a concise way, typically for short-term use and for operations that require a simple function argument.
Here's the basic syntax of a lambda function:
lambda arguments: expression
Let's break down the components:
lambda
: The keyword that signifies the definition of an anonymous function.arguments
: A comma-separated list of parameters (likex, y, z
).expression
: A single expression which is executed and its value is returned when the lambda function is called.
Here is an example of a lambda function that adds two numbers:
add = lambda x, y: x + y
print(add(5, 3)) # Output: 8
In this example, add
is a variable that references a lambda function taking two arguments, x
and y
, and returns their sum. Lambda functions are often used in higher-order functions, such as map()
, filter()
, and sorted()
, which take a function as an argument.
In the context of a DataFrame, particularly when working with the pandas library in Python, lambda expressions are often used to apply a function to rows or columns of data. They can be very useful for performing quick transformations and for applying complex operations without having to define a separate, named function.
Here are some common use cases for lambda expressions with pandas DataFrames:
-
Using
apply()
:
Theapply()
method is used to apply a function along an axis of the DataFrame. Lambda expressions are often passed to this method.import pandas as pd df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) df['A_plus_B'] = df.apply(lambda row: row['A'] + row['B'], axis=1)
In this example, a new column 'A_plus_B' is created by adding together the values in columns 'A' and 'B' for each row.
-
Using
map()
on Series:
Themap()
function is used to map values of a Series according to an input mapping or function. This is where a lambda function can be particularly handy.df['A_squared'] = df['A'].map(lambda x: x**2)
Here, the lambda function is squaring each value in column 'A' and the result is assigned to a new column 'A_squared'.
-
Using
applymap()
:
Theapplymap()
method is used to apply a function to every single element in the DataFrame.df = df.applymap(lambda x: x*10)
This will multiply every element in the DataFrame by 10.
-
Using
filter()
:
You can use lambda expressions with thefilter()
method to filter out elements of a Series.df['A'].filter(lambda x: x > 1)
-
Sorting:
When sorting by a column, you can use a lambda expression within thesort_values()
method to sort by some derived value or condition.df.sort_values(by='A', key=lambda col: col % 3)
-
Conditional Operations:
Lambda expressions can be used to perform conditional operations withinapply()
,map()
, or even when creating new columns.df['is_even'] = df['A'].apply(lambda x: 'yes' if x % 2 == 0 else 'no')
-
Aggregation:
With groupby operations, you might want to aggregate data using a custom function defined with a lambda expression.df.groupby('group_column').agg(lambda x: x.max() - x.min())
Lambda expressions are powerful when working with DataFrames because they allow for significant flexibility and conciseness in data manipulation tasks. However, it's worth noting that they can sometimes be less efficient than using vectorized operations directly supported by pandas, so for large datasets or performance-critical applications, it's often better to find a built-in function that can achieve the same result.
A special example:
# Split once and assign to new columns using a lambda function
df[['code', 'year']] = df['column_to_split'].apply(lambda x: pd.Series([x.split('_')[0], x.split('_')[2]]))
lambda function on list:
Yes, lambda functions can be used on lists in Python. A lambda function is a small anonymous function that can take any number of arguments but can only have one expression. It's often used in conjunction with functions like map()
, filter()
, and reduce()
, which all can operate on lists.
Here are some examples of how you might use a lambda function on a list:
Using map()
to apply a lambda function to each item in a list:
numbers = [1, 2, 3, 4, 5]
squared = map(lambda x: x ** 2, numbers)
print(list(squared))
This will output:
[1, 4, 9, 16, 25]
Using filter()
to filter items in a list based on a lambda function:
numbers = [1, 2, 3, 4, 5]
even_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(even_numbers))
This will output:
[2, 4]
Using a lambda function in a list comprehension:
numbers = [1, 2, 3, 4, 5]
squared = [lambda x: x ** 2 for x in numbers]
print([sq(5) for sq in squared])
This will output:
[25, 25, 25, 25, 25]
Note that in the list comprehension example above, the lambda isn't immediately invoked. Instead, it creates a list of lambda functions (squared
), each of which will square its input. The second print statement actually calls each lambda with an argument of 5.
Lambda functions are very versatile and can be used in many different ways with lists and other iterable data structures in Python.