pandas.apply() 是 Pandas 库中的一个函数,用于在 DataFrame 或 Series 上应用自定义函数。这个函数可以沿着指定的轴(行或列)逐行或逐列地应用函数,从而实现对数据的定制化操作。
参数:
func(必需):这是要应用的函数,可以是一个 Python 函数、lambda 函数或可调用对象。这个函数将应用于 Series 或 DataFrame 的每个元素或行/列,具体取决于 axis 参数的设置。
axis(可选):指定函数应用的轴方向。有两个选项:
axis=0(默认值):将函数应用于每一列,即按列方向操作。
axis=1:将函数应用于每一行,即按行方向操作。
raw(可选):一个布尔值,用于控制是否将数据以 NumPy 数组的形式传递给函数。有两个选项:
result_type(可选):指定函数的返回类型。有两个选项:
args(可选):一个元组,包含传递给函数的额外参数。这可以用来向函数传递额外的参数。
**kwds(可选):关键字参数,用于传递给函数的额外关键字参数。
import pandas as pd # 导入 Pandas 库并使用别名 pd
# 创建一个示例 DataFrame
data = {'A': [1, 2, 3, 4, 5],'B': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
print("原df\n", df)
# 原df
# A B
# 0 1 10
# 1 2 20
# 2 3 30
# 3 4 40
# 4 5 50
# 使用 lambda 函数将每个元素加倍
df['A2'] = df['A'].apply(lambda x: x * 2)
print("A列2倍处理后的df\n", df)
# A列2倍处理后的df
# A B A2
# 0 1 10 2
# 1 2 20 4
# 2 3 30 6
# 3 4 40 8
# 4 5 50 10
# 增加新列 Row_Sum,值为A列和B列对应位置相加的结果
def row_sum(row):
return row['A'] + row['B']
df['Row_Sum'] = df.apply(row_sum, axis=1)
print("增加AB两列和后的df\n", df)
# 增加AB两列和后的df
# A B A2 Row_Sum
# 0 1 10 2 11
# 1 2 20 4 22
# 2 3 30 6 33
# 3 4 40 8 44
# 4 5 50 10 55
pandas.map() 是 Pandas 库中的一个方法,主要用于对 Series 中的每个元素应用一个函数或一个字典,将每个元素映射到另一个值上。它可以用于进行元素级的转换,从而创建新的 Series。
参数:
import pandas as pd # 导入 Pandas 库并使用别名 pd
# 创建一个示例 Series
data = {'A': ['apple', 'banana', 'cherry', 'date']}
s = pd.Series(data['A'])
# 使用字典映射元素到新的值
dict1 = {'apple': 'fruit', 'banana': 'fruit', 'cherry': 'fruit'}
s_mapped = s.map(dict1)
print(s_mapped)
# 0 fruit
# 1 fruit
# 2 fruit
# 3 NaN
# dtype: object
# 使用函数映射元素到新的值
def func(x):
if x in ['apple', 'banana', 'cherry']:
return 'fruit'
else:
return 'other'
s_mapped2= s.map(func)
print(s_mapped2)
# 0 fruit
# 1 fruit
# 2 fruit
# 3 other
# dtype: object
import pandas as pd # 导入 Pandas 库并使用别名 pd
# 创建一个示例 DataFrame
data = {'A': [1, 2, 3, 4, 5],'B': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
# 计算平均值
mean_A = df['A'].mean()
mean_B = df['B'].mean()
print(f'A列平均值: {mean_A}') # A列平均值: 3.0
print(f'B列平均值: {mean_B}') # B列平均值: 30.0
import pandas as pd # 导入 Pandas 库并使用别名 pd
# 创建一个示例 DataFrame
data = {'A': [1, 2, 3, 4, 5],'B': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
# 计算中位数
median_A = df['A'].median()
median_B = df['B'].median()
print(f'A列中位数: {median_A}') # A列中位数: 3.0
print(f'B列中位数: {median_B}') # B列中位数: 30.0
import pandas as pd # 导入 Pandas 库并使用别名 pd
# 创建一个示例 DataFrame
data = {'A': [1, 2, 3, 4, 5],'B': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
# 计算总和
sum_A = df['A'].sum()
sum_B = df['B'].sum()
print(f'A列求和: {sum_A}') # A列求和: 15
print(f'B列求和: {sum_B}') # B列求和: 150
import pandas as pd # 导入 Pandas 库并使用别名 pd
# 创建一个示例 DataFrame
data = {'A': [1, 2, 3, 4, 5],'B': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
# 找到最小值
min_A = df['A'].min()
min_B = df['B'].min()
print(f'A列最小值: {min_A}') # A列最小值: 1
print(f'B列最小值: {min_B}') # B列最小值: 10
import pandas as pd # 导入 Pandas 库并使用别名 pd
# 创建一个示例 DataFrame
data = {'A': [1, 2, 3, 4, 5],'B': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
# 找到最大值
max_A = df['A'].max()
max_B = df['B'].max()
print(f'A列最大值: {max_A}') # A列最大值: 5
print(f'B列最大值: {max_B}') # B列最大值: 50
import pandas as pd # 导入 Pandas 库并使用别名 pd
# 创建一个示例 DataFrame
data = {'A': [1, 2, 3, 4, 5],'B': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
# 计算标准差
std_A = df['A'].std()
std_B = df['B'].std()
print(f'A列标准差: {std_A}') # 标准差A: 1.5811388300841898
print(f'B列标准差: {std_B}') # 标准差B: 15.811388300841896
import pandas as pd # 导入 Pandas 库并使用别名 pd
# 创建一个示例 DataFrame
data = {'A': [1, 2, 3, 4, 5],'B': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
# 计算方差
var_A = df['A'].var()
var_B = df['B'].var()
print(f'A列方差: {var_A}') # A列方差: 2.5
print(f'B列方差: {var_B}') # B列方差: 250.0
import pandas as pd # 导入 Pandas 库并使用别名 pd
# 创建一个示例 DataFrame
data = {'A': [1, 2, 3, 4, 5],'B': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
# 计算非空值的数量
count_A = df['A'].count()
count_B = df['B'].count()
print(f'A列非空值数量: {count_A}') # A列非空值数量: 5
print(f'B列非空值数量: {count_B}') # B列非空值数量: 5
import pandas as pd # 导入 Pandas 库并使用别名 pd
# 创建一个示例 DataFrame
data = {'A': [1, 2, 3, 4, 5],'B': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
# 生成摘要统计信息
summary_A = df['A'].describe()
summary_B = df['B'].describe()
print(f'A列概览:\n{summary_A}')
# A列概览:
# count 5.000000
# mean 3.000000
# std 1.581139
# min 1.000000
# 25% 2.000000
# 50% 3.000000
# 75% 4.000000
# max 5.000000
# Name: A, dtype: float64
print(f'B列概览:\n{summary_B}')
# B列概览:
# count 5.000000
# mean 30.000000
# std 15.811388
# min 10.000000
# 25% 20.000000
# 50% 30.000000
# 75% 40.000000
# max 50.000000
# Name: B, dtype: float64
import pandas as pd # 导入 Pandas 库并使用别名 pd
# 创建一个示例 DataFrame
data = {'A': [1, 2, 3, 4, 5],'B': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
# 计算唯一值的频率
value_counts_A = df['A'].value_counts()
value_counts_B = df['B'].value_counts()
print(f'A列各值计数:\n{value_counts_A}')
# A列各值计数:
# A
# 1 1
# 2 1
# 3 1
# 4 1
# 5 1
# Name: count, dtype: int64
print(f'B列各值计数:\n{value_counts_B}')
# B列各值计数:
# B
# 10 1
# 20 1
# 30 1
# 40 1
# 50 1
# Name: count, dtype: int64
作用是对元素级的数据(单元格数据)进行处理,能处理的是字符串。
计算每个字符串的长度
import pandas as pd # 导入 Pandas 库并使用别名 pd
# 创建一个示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie']}
df = pd.DataFrame(data)
df['name_length'] = df['name'].str.len()
print(df)
# name name_length
# 0 Alice 5
# 1 Bob 3
# 2 Charlie 7
str.lower():将字符串转换为小写
str.upper():将字符串转换为大写
import pandas as pd # 导入 Pandas 库并使用别名 pd
# 创建一个示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie']}
df = pd.DataFrame(data)
df['name_lower'] = df['name'].str.lower()
df['name_upper'] = df['name'].str.upper()
print(df)
# name name_lower name_upper
# 0 Alice alice ALICE
# 1 Bob bob BOB
# 2 Charlie charlie CHARLIE
替换字符串中的子字符串
import pandas as pd # 导入 Pandas 库并使用别名 pd
# 创建一个示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie']}
df = pd.DataFrame(data)
df['name_replaced'] = df['name'].str.replace('a', 'X')
print(df)
# name name_replaced
# 0 Alice Alice
# 1 Bob Bob
# 2 Charlie ChXrlie
str.strip():删除字符串两侧的空格
str.lstrip():删除字符串左侧的空格
str.rstrip():删除字符串右侧的空格
import pandas as pd # 导入 Pandas 库并使用别名 pd
# 创建一个示例 DataFrame
data = {'name': [' Alice ', ' Bob ', ' Charlie ']}
df = pd.DataFrame(data)
df['name_strip'] = df['name'].str.strip()
df['name_lstrip'] = df['name'].str.lstrip()
df['name_rstrip'] = df['name'].str.rstrip()
print(df)
# name name_strip name_lstrip name_rstrip
# 0 Alice Alice Alice Alice
# 1 Bob Bob Bob Bob
# 2 Charlie Charlie Charlie Charlie
拆分字符串为列表
import pandas as pd # 导入 Pandas 库并使用别名 pd
# 创建一个示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie']}
df = pd.DataFrame(data)
df['name_split'] = df['name'].str.split(' ')
print(df)
# name name_split
# 0 Alice [Alice]
# 1 Bob [Bob]
# 2 Charlie [Charlie]
str.startswith():检查字符串是否以特定前缀开头
str.endswith():检查字符串是否以特定后缀开头
import pandas as pd # 导入 Pandas 库并使用别名 pd
# 创建一个示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie']}
df = pd.DataFrame(data)
df['name_startswith'] = df['name'].str.startswith('A')
df['name_endswith'] = df['name'].str.endswith('e')
print(df)
# name name_startswith name_endswith
# 0 Alice True True
# 1 Bob False False
# 2 Charlie False True
用于计算字符串中非空元素的方法
import pandas as pd # 导入 Pandas 库并使用别名 pd
# 创建一个示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', None, 'David']}
df = pd.DataFrame(data)
count_substring = df['name'].str.count('a')
print(count_substring)
# 0 0.0
# 1 0.0
# 2 1.0
# 3 NaN
# 4 1.0
# Name: name, dtype: float64
print(count_substring.sum()) # 2.0
groupby() 是 Pandas 中一个方法,用于将数据按照一个或多个列的值分组,然后对每个分组应用聚合函数。
参数:
import pandas as pd # 导入 Pandas 库并使用别名 pd
# 创建一个示例 DataFrame
data = {'Category': ['A', 'B', 'A', 'B', 'A'],'Value': [10, 20, 15, 25, 30]}
df = pd.DataFrame(data)
# 按 Category 列分组,并计算每个分组的平均值
grouped = df.groupby(by='Category')
res1 = grouped.mean()
print(res1)
# Value
# Category
# A 18.333333
# B 22.500000
# 使用多列进行分组
grouped = df.groupby(by=['Category', 'Value'])
# 聚合求和
res2 = grouped.sum()
print(res2)
# Empty DataFrame
# Columns: []
# Index: [(A, 10), (A, 15), (A, 30), (B, 20), (B, 25)]
# 使用自定义聚合函数
def custom_agg(x):
return x.max() - x.min()
res3 = df.groupby(by='Category').agg(custom_agg)
print(res3)
# Value
# Category
# A 20
# B 5
pivot_table() 是 Pandas 中用于创建数据透视表的方法。数据透视表是一种用于总结和聚合数据的强大工具,可以根据一个或多个列对数据进行重新排列,以便更容易进行分析。
参数:
import pandas as pd # 导入 Pandas 库并使用别名 pd
# 创建一个示例 DataFrame
data = {'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02', '2023-01-03'],'Category': ['A', 'B', 'A', 'B', 'A'],'Value': [10, 20, 15, 25, 30]}
df = pd.DataFrame(data)
print(df)
# Date Category Value
# 0 2023-01-01 A 10
# 1 2023-01-01 B 20
# 2 2023-01-02 A 15
# 3 2023-01-02 B 25
# 4 2023-01-03 A 30
# 创建数据透视表,聚合'Value'列,行索引为'Date',列索引为'Category',默认聚合函数为均值
pivot = pd.pivot_table(df, values='Value', index='Date', columns='Category')
print(pivot)
# Category A B
# Date
# 2023-01-01 10.0 20.0
# 2023-01-02 15.0 25.0
# 2023-01-03 30.0 NaN
记录学习过程,欢迎讨论交流,尊重原创,转载请注明出处~