Python Pandas – 迭代并获取包含所需文本的行
在使用Python Pandas进行数据处理时,经常会需要从大量数据中筛选出符合特定条件的行。比如,我们有一个包含交易记录的数据表格,每行记录中都包含交易金额(Transaction Amount)和交易类型(Transaction Type),我们需要找到所有交易金额大于1000的交易记录。
要实现这个目标,我们可以使用Pandas提供的查询功能,或者进行迭代来筛选出符合条件的行。在本文中,我们将介绍如何使用迭代方式来实现这个目标。
前置知识
在掌握如何迭代并获取包含所需文本的行之前,有几个前置知识需要掌握:
- Pandas DataFrame:Pandas中最常用的数据结构之一,类似于Excel中的数据表格,由多个数据列组成。
- Pandas Series:一个数据列,由若干数据项组成。
- 迭代器(Iterator):在Python中,可以使用迭代器来遍历一个集合(比如一个列表或一个数组)中的所有元素,而无需使用循环结构。
示例数据
让我们先定义一个包含两个数据列的DataFrame,其中一个数据列是交易类型,另一个数据列是交易金额。
import pandas as pd
transaction_df = pd.DataFrame({
"Transaction Type": ["Deposit", "Withdrawal", "Deposit", "Withdrawal", "Deposit"],
"Transaction Amount": [1500, 2000, 500, 1000, 2500]
})
print(transaction_df)
输出结果:
Transaction Type Transaction Amount
0 Deposit 1500
1 Withdrawal 2000
2 Deposit 500
3 Withdrawal 1000
4 Deposit 2500
迭代方式
我们可以使用DataFrame.iterrows()方法遍历DataFrame中的每一行,并获取每行的数据。具体来说,iterrows()方法返回一个元组(index, row),其中index是行索引,row是一个Series对象,其中包含了该行的所有数据。
下面是一个例子,演示如何遍历每一行,并获取每一行的交易金额和交易类型:
for index, row in transaction_df.iterrows():
print(row["Transaction Type"], row["Transaction Amount"])
输出结果:
Deposit 1500
Withdrawal 2000
Deposit 500
Withdrawal 1000
Deposit 2500
在这个例子中,我们实现了对每一行数据的遍历,并打印了每一行的交易类型和交易金额。
为了筛选出符合条件的行,我们可以在迭代过程中进行判断,然后将符合条件的行记录下来。比如,在上面的例子中,我们可以筛选出所有交易金额大于1000的交易记录,代码如下:
filtered_rows = []
for index, row in transaction_df.iterrows():
if row["Transaction Amount"] > 1000:
filtered_rows.append(row)
filtered_df = pd.DataFrame(filtered_rows)
print(filtered_df)
输出结果:
Transaction Type Transaction Amount
0 Withdrawal 2000
1 Withdrawal 1000
2 Deposit 2500
在这个例子中,我们首先定义了一个列表filtered_rows,用于记录符合条件的行。然后,遍历DataFrame中的每一行,如果该行的交易金额大于1000,就将该行记录添加到filtered_rows列表中。最后,我们将filtered_rows列表转化为DataFrame对象,并打印出结果。
更高效的方法
虽然使用迭代方式可以实现筛选出符合条件的行,但是在大型数据集上的效率并不高。因此,我们可以使用更高效的方法来实现该目标。
具体来说,我们可以使用DataFrame的布尔索引(BooleanIndexing)功能来完成筛选任务。布尔索引是Pandas中强大的数据筛选工具,它可以根据逻辑条件来筛选数据,并返回满足条件的所有行或所有列。
下面是一个例子,演示如何使用布尔索引筛选出所有交易金额大于1000的交易记录:
filtered_df = transaction_df[transaction_df["Transaction Amount"] > 1000]
print(filtered_df)
输出结果:
Transaction Type Transaction Amount
1 Withdrawal 2000
3 Withdrawal 1000
4 Deposit 2500
在这个例子中,我们首先使用布尔条件transaction_df[“Transaction Amount”] > 1000来筛选出交易金额大于1000的所有行。然后,我们使用筛选结果来对原始DataFrame进行布尔索引,从而筛选出符合条件的交易记录。最后,我们将筛选结果打印出来。
结论
在本文中,我们介绍了如何使用迭代方式和布尔索引来实现从数据表格中筛选出包含所需文本的行。尽管这两种方法都能够完成任务,但是布尔索引在大型数据集上表现更为出色。因此,在实际使用中,我们应该尽可能地使用布尔索引来进行数据筛选。