1.使用自定义函数的原因
- Pandas虽然提供了大量处理数据的API,但是当提供的API无法满足需求的时候,这时候就需要使用自定义函数来解决相关的问题
2.
data = {'column1':[1, 2, 15, 4, 8]}
df = pd.DataFrame(data)
请创建一个新的列'new_column',其值为'column1'中每个元素的两倍,当原来的元素大于10的时候,将新列里面的值赋0
import pandas as pd# 自定义函数
def process_data(x):if x > 10:return 0else:return x * 2# 创建DataFrame数据
data = {'column1':[1, 2, 15, 4, 8]}
df = pd.DataFrame(data)
# 应用自定义函数
df['new_column'] = df['column1'].apply(process_data)
3.请创建一个两列的DataFrame数据,自定义一个lambda函数用来两列之和,并将最终的结果添加到新的列'sum_columns'当中
import pandas as pd # 创建一个示例 DataFrame
data = {'column1': [1, 2, 3, 4, 5], 'column2': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data) # 定义一个 lambda 函数来计算两列之和
add_columns = lambda x: x['column1'] + x['column2'] # 应用 lambda 函数到 DataFrame 的新列 'sum_column' 中
df['sum_columns'] = df.apply(add_columns, axis=1)
4.假设有一个包含学生考试成绩的DataFrame,其中每行代表一个学生,列名为'Name', 'Math Score','English Score, 'Science Score'和'Overall Score',请编写一个函数将每个学生三科成绩相加,并将结果存储在'Overall Score'列中,然后使用apply方法将该函数应用于DataFrame的每一行
# 编写函数将学生成绩相加
def calculate_overall_score(row):row['Overall Score'] = row['Math Score'] + row['English Score'] + row['Science Score']return row# 使用apply方法将该函数应用于DataFrame的每一行
df.apply(calculate_overall_score, axis=1)
5.
df = pd.DataFrame({'col1': ['12a3', '4b5c', '6de'], 'col2': ['a1b2', 'c3d4', 'e5f6']})
使用apply方法,自定义一个函数,将DataFrame中的字符串列中的所有数字提取出来并拼接成一个新的字符串列。
import pandas as pd
def extract_numbers(s): return ''.join([str(int(i)) for i in s if i.isdigit()]) df = pd.DataFrame({'col1': ['12a3', '4b5c', '6de'], 'col2': ['a1b2', 'c3d4', 'e5f6']})
df['col3'] = df['col1'].apply(extract_numbers)
print(df['col3'])
6.
假设有一个名为data的DataFrame,其中包含以下列:
- name:字符串类型,表示姓名
- age:整数类型,表示年龄
- gender:字符串类型,表示性别
- score:浮点数类型,表示分数
请自定义一个函数my_function,它接受DataFrame的一行作为参数,并根据某些条件修改该行的值
- 将年龄大于等于18的人的性别修改为”已成年“;
- 在Seris中使用apply方法
def my_function(row):if row['age'] >= 18:row['gender'] = '已成年'return row# 2.data['gender'] = data['gender'].apply(my_function)