Pandas的apply方法的应用练习
2024-01-01 13:29:58
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 0
else:
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)
文章来源:https://blog.csdn.net/qq_64685283/article/details/135322807
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!