python pandas库学习

apply() 方法

pandas 中的 apply 方法是一个非常灵活且强大的工具,可用于对 SeriesDataFrame 对象中的元素、行或列应用自定义函数。下面为你从多个方面详细介绍其用法。

1. 对 Series 对象使用 apply

Series 是一维带标签数组,apply 可对其中每个元素应用指定函数。

基础示例

1
2
3
4
5
6
7
8
9
10
11
12
import pandas as pd

# 创建一个 Series
s = pd.Series([1, 2, 3, 4, 5])

# 定义一个简单的函数,用于将元素乘以 2
def multiply_by_two(x):
return x * 2

# 使用 apply 方法应用函数
result = s.apply(multiply_by_two)
print(result)

在这个例子中,multiply_by_two 函数被应用到 Series 的每个元素上,将每个元素都乘以 2。

使用匿名函数(lambda 函数)

1
2
3
4
5
6
import pandas as pd

s = pd.Series([1, 2, 3, 4, 5])
# 使用 lambda 函数进行同样的操作
result = s.apply(lambda x: x * 2)
print(result)

lambda 函数让代码更简洁,适合实现简单逻辑。

2. 对 DataFrame 对象使用 apply

DataFrame 是二维表格型数据结构,apply 可按行或列应用函数,通过 axis 参数控制。

按列应用函数(axis = 0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import pandas as pd

# 创建一个 DataFrame
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})

# 定义一个函数,用于计算每列的和
def column_sum(column):
return column.sum()

# 使用 apply 按列应用函数
result = df.apply(column_sum, axis=0)
print(result)

这里 axis = 0 表示按列操作,函数会依次对每列进行计算。

按行应用函数(axis = 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pandas as pd

df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})

# 定义一个函数,用于计算每行的和
def row_sum(row):
return row['A'] + row['B']

# 使用 apply 按行应用函数
result = df.apply(row_sum, axis=1)
print(result)

axis = 1 表示按行操作,函数会依次对每行进行计算。

3. 传递额外参数

apply 方法允许传递额外参数给自定义函数。

1
2
3
4
5
6
7
8
9
10
11
import pandas as pd

s = pd.Series([1, 2, 3, 4, 5])

# 定义一个函数,接受额外参数
def add_value(x, value):
return x + value

# 使用 apply 并传递额外参数
result = s.apply(add_value, args=(3,))
print(result)

在这个例子中,args 参数是一个元组,包含要传递给 add_value 函数的额外参数。

4. 处理缺失值

apply 方法会自动处理缺失值(NaN),它会将缺失值原样保留。

1
2
3
4
5
6
7
8
9
10
11
12
import pandas as pd
import numpy as np

s = pd.Series([1, np.nan, 3, 4, 5])

# 定义一个函数
def square(x):
return x ** 2

# 使用 apply 方法
result = s.apply(square)
print(result)

可以看到,NaN 值在处理后依然是 NaN

5. 返回不同类型结果

apply 方法可以返回不同类型的结果,例如返回 SeriesDataFrame

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pandas as pd

df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})

# 定义一个函数,返回一个 Series
def custom_function(row):
return pd.Series([row['A'] * 2, row['B'] * 3], index=['A_new', 'B_new'])

# 使用 apply 方法
result = df.apply(custom_function, axis=1)
print(result)

这里自定义函数返回一个 Seriesapply 会将这些 Series 组合成一个新的 DataFrame

综上所述,pandasapply 方法为数据处理提供了极大的灵活性,能帮助你高效地对数据进行自定义操作。

读取tsv格式文件

  • 我有如下图一个tsv格式文件:

  • 我该怎么把指定的列提取出来呢