Pandas库实战练习:掌握Python数据处理技能
练习1
编程题1:创建和操作Series
任务描述:
使用Pandas创建一个Series对象,包含以下数据:
data = [10, 20, 30, 40, 50]
index = ['a', 'b', 'c', 'd', 'e']
完成以下任务:
创建一个Series对象series1。
使用series1创建一个新的Series对象series2,索引为['e', 'd', 'c', 'b', 'a']。
将series1和series2相加,结果存储到series_sum中。
输出series_sum。
import pandas as pd
# 创建Series对象
data = [10, 20, 30, 40, 50]
index = ['a', 'b', 'c', 'd', 'e']
series1 = pd.Series(data, index=index)
# 创建新Series对象(索引顺序反转)
series2 = series1[['e', 'd', 'c', 'b', 'a']]
# 相加
series_sum = series1 + series2
# 输出结果
print("series1:\n", series1)
print("\nseries2:\n", series2)
print("\nseries_sum:\n", series_sum)
编程题2:DataFrame的创建和索引操作
任务描述:
使用Pandas创建一个DataFrame对象,包含以下数据:
data = {
'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'score': [85, 90, 88]
}
完成以下任务:
创建一个DataFrame对象df。
使用name列作为行索引。
添加一列gender,值为['F', 'M', 'M']。
输出df。
import pandas as pd
# 创建DataFrame
data = {
'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'score': [85, 90, 88]
}
df = pd.DataFrame(data)
# 设置name列为索引
df.set_index('name', inplace=True)
# 添加gender列
df['gender'] = ['F', 'M', 'M']
# 输出结果
print(df)
编程题3:数据筛选与条件操作
任务描述:
使用Pandas创建一个DataFrame对象,包含以下数据:
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'age': [23, 25, 22, 24, 23],
'score': [85, 90, 88, 92, 87]
}
完成以下任务:
创建一个DataFrame对象df。
筛选出年龄大于23岁的学生。
将筛选结果中成绩低于90分的学生的成绩提高5分。
输出最终的筛选结果。
import pandas as pd
# 创建DataFrame
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'age': [23, 25, 22, 24, 23],
'score': [85, 90, 88, 92, 87]
}
df = pd.DataFrame(data)
# 筛选年龄大于23岁的学生
filtered = df[df['age'] > 23].copy()
# 成绩低于90分的提高5分
filtered.loc[filtered['score'] < 90, 'score'] += 5
# 输出结果
print(filtered)
编程题4:DataFrame的列操作
任务描述:
使用Pandas创建一个DataFrame对象,包含以下数据:
data = {
'A': [1, 2, 3, 4],
'B': [5, 6, 7, 8],
'C': [9, 10, 11, 12]
}
完成以下任务:
创建一个DataFrame对象df。
添加一列D,值为列A和列B的和。
删除列C。
输出最终的DataFrame。
import pandas as pd
# 创建DataFrame
data = {
'A': [1, 2, 3, 4],
'B': [5, 6, 7, 8],
'C': [9, 10, 11, 12]
}
df = pd.DataFrame(data)
# 添加列D(A+B)
df['D'] = df['A'] + df['B']
# 删除列C
df.drop('C', axis=1, inplace=True)
# 输出结果
print(df)
编程题5:DataFrame的行操作
任务描述:
使用Pandas创建一个DataFrame对象,包含以下数据:
data = {
'A': [1, 2, 3, 4],
'B': [5, 6, 7, 8],
'C': [9, 10, 11, 12]
}
完成以下任务:
创建一个DataFrame对象df。
添加一行数据,索引为4,值为[5, 6, 7]。
删除索引为2的行。
输出最终的DataFrame。
import pandas as pd
# 创建DataFrame
data = {
'A': [1, 2, 3, 4],
'B': [5, 6, 7, 8],
'C': [9, 10, 11, 12]
}
df = pd.DataFrame(data)
# 添加新行
df.loc[4] = [5, 6, 7]
# 删除索引为2的行
df.drop(2, inplace=True)
# 输出结果
print(df)
练习2
4.对以下数据集进行分组,并计算每个组的平均年龄。
data = {
'Team': ['A', 'B', 'A', 'B', 'A', 'B'],
'Age': [25, 30, 22, 35, 24, 32],
'Score': [85, 90, 78, 92, 72, 89]
}
要求:
按Team列分组。
计算每个组的Age列的平均值。
import pandas as pd
# 创建 DataFrame
data = {
'Team': ['A', 'B', 'A', 'B', 'A', 'B'],
'Age': [25, 30, 22, 35, 24, 32],
'Score': [85, 90, 78, 92, 72, 89]
}
df = pd.DataFrame(data)
# 按 Team 分组并计算平均年龄
grouped_age = df.groupby('Team')['Age'].mean()
print("各组的平均年龄:\n", grouped_age)
5.有两个数据集,使用Pandas的merge()函数将它们合并。
left_df = pd.DataFrame({
'Key': ['K0', 'K1', 'K2'],
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']
})
right_df = pd.DataFrame({
'Key': ['K0', 'K1', 'K2'],
'C': ['C0', 'C1', 'C2'],
'D': ['D0', 'D1', 'D2']
})
要求:
使用内连接(inner join)合并两个DataFrame。
合并后的DataFrame应包含所有匹配的键。
# 创建两个 DataFrame
left_df = pd.DataFrame({
'Key': ['K0', 'K1', 'K2'],
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']
})
right_df = pd.DataFrame({
'Key': ['K0', 'K1', 'K2'],
'C': ['C0', 'C1', 'C2'],
'D': ['D0', 'D1', 'D2']
})
# 使用内连接合并
merged_df = pd.merge(left_df, right_df, on='Key', how='inner')
print("合并后的结果:\n", merged_df)
6.数据分组与聚合
任务描述:
使用Pandas创建一个DataFrame对象,包含以下数据:
data = {
'Category': ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'],
'Value1': [10, 20, 30, 40, 50, 60, 70, 80],
'Value2': [15, 25, 35, 45, 55, 65, 75, 85]
}
完成以下任务:
创建一个DataFrame对象df。
按Category列进行分组,并计算每组中Value1和Value2的平均值。
在分组的基础上,计算每组中Value1和Value2的标准差。
输出最终的分组结果。
# 创建 DataFrame
data = {
'Category': ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'],
'Value1': [10, 20, 30, 40, 50, 60, 70, 80],
'Value2': [15, 25, 35, 45, 55, 65, 75, 85]
}
df = pd.DataFrame(data)
# 按 Category 分组,计算均值和标准差
result = df.groupby('Category').agg({
'Value1': ['mean', 'std'],
'Value2': ['mean', 'std']
})
print("分组聚合结果:\n", result)
7.数据合并与去重
任务描述:
使用Pandas创建两个DataFrame对象,包含以下数据:
data1 = {
'ID': [1, 2, 3, 4],
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 35, 40]
}
data2 = {
'ID': [3, 4, 5, 6],
'Name': ['Charlie', 'David', 'Eve', 'Frank'],
'Age': [35, 40, 45, 50]
}
完成以下任务:
创建两个DataFrame对象df1和df2。
将df1和df2按ID列进行合并,使用外连接(outer)。
在合并后的DataFrame中,删除重复的行(基于ID列)。
输出最终的合并结果。
# 创建两个 DataFrame
data1 = {
'ID': [1, 2, 3, 4],
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 35, 40]
}
data2 = {
'ID': [3, 4, 5, 6],
'Name': ['Charlie', 'David', 'Eve', 'Frank'],
'Age': [35, 40, 45, 50]
}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
# 外连接合并,并去重
merged_df = pd.merge(df1, df2, on='ID', how='outer', suffixes=('_1', '_2'))
merged_df = merged_df.drop_duplicates(subset='ID', keep='first')
print("最终合并结果:\n", merged_df)
作者:linn125