Pandas 对DataFrame中的每个单元格应用函数
在本文中,我们将介绍Pandas中DataFrame中的apply方法和applymap方法。这些方法可以让我们对DataFrame中的每个单元格(cell)应用函数,并将结果返回到DataFrame中。使用这些方法可以极大地简化数据清洗和数据处理的过程。
阅读更多:Pandas 教程
Pandas DataFrame的apply方法
Pandas DataFrame的apply方法可以让我们对DataFrame中的每列或者每行应用一个函数。apply方法接收一个函数作为参数,并返回一个新的DataFrame,其中应用了该函数。
假设我们有以下DataFrame:
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
})
现在我们想要对DataFrame中的每个单元格应用一个函数,该函数将该单元格的值加上1。我们可以定义一个函数:
def add_one(x):
return x + 1
然后使用apply方法将该函数应用到DataFrame中的每个单元格:
new_df = df.apply(add_one)
print(new_df)
输出结果为:
A B C
0 2 5 8
1 3 6 9
2 4 7 10
可以看到,apply方法将add_one函数应用到了DataFrame中的每个单元格,并将结果返回到了一个新的DataFrame中。在这个例子中,我们对每个单元格应用的函数是非常简单的,但是apply方法同样适用于更复杂的函数。
我们也可以使用apply方法对每行(或每列)应用一个函数。只需要指定axis参数的值为1(或0)即可。例如,对每行应用一个函数:
def sum_row(row):
return row.sum()
row_sums = df.apply(sum_row, axis=1)
print(row_sums)
输出结果为:
0 12
1 15
2 18
dtype: int64
也可以对每列应用一个函数:
def sum_column(col):
return col.sum()
column_sums = df.apply(sum_column, axis=0)
print(column_sums)
输出结果为:
A 6
B 15
C 24
dtype: int64
Pandas DataFrame的applymap方法
applymap方法可以让我们对DataFrame中的每个单元格应用一个函数。与apply方法不同,applymap方法不会区分每列或者每行,而是对DataFrame中的每个单元格应用相同的函数。applymap方法接收一个函数作为参数,并返回一个新的DataFrame,其中应用了该函数。
我们可以使用上面的例子,对DataFrame中的每个单元格应用一个函数,该函数将该单元格的值乘以2:
def multiply_two(x):
return x * 2
new_df = df.applymap(multiply_two)
print(new_df)
输出结果为:
A B C
0 2 8 14
1 4 10 16
2 6 12 18
可以看到,applymap方法将multiply_two函数应用到了DataFrame中的每个单元格,并将结果返回到了一个新的DataFrame中。
总结
在本文中,我们介绍了Pandas中DataFrame的apply方法和applymap方法。这些方法可以让我们对DataFrame中的每个单元格应用函数,并将结果返回到DataFrame中。使用这些方法可以极大地简化数据清洗和数据处理的过程。在应用函数之前,我们需要定义好要应用的函数,根据具体情况选择合适的apply方法或applymap方法。
极客教程