HOWTO · Pandas
遍历 Pandas DataFrame 的列
本教程演示了如何在 Dataframe 的列中进行遍历。
本页内容
遍历 Pandas DataFrame 的列时,可以循环访问 DataFrame,取得每个列标签,再用 df[column] 按标签选出对应的 Series。需要同时取得标签和 Series 时,使用 DataFrame.items();还需要列在序列中的位置时,使用 enumerate()。
使用 for 循环和 df[column] 遍历列
循环遍历 DataFrame 时,得到的是列标签。每次循环中,df[column] 会选出与该标签对应的 Series。下面的示例会逐列打印标签,以及该列转换为 Python 列表后的值:
import pandas as pd
df = pd.DataFrame(
{"name": ["Ada", "Lin"], "score": [9, 8]}
)
for column in df:
print(column, df[column].tolist())
name ['Ada', 'Lin']
score [9, 8]
循环变量是 name 或 score 这样的列标签,而不是行号。选出的 Series 会保留 DataFrame 的行索引。只有在后续步骤需要列表时,才用 .tolist() 将其转换为列表;.values 则会提供类似数组的表示形式。
使用 DataFrame.items() 遍历列标签和 Series
DataFrame.items() 会依次返回每个列标签及其对应的 Series。可以解包这对值,在循环中直接处理标签和 Series。下面的示例会打印每个标签及其 Series 中的值:
import pandas as pd
df = pd.DataFrame(
{"name": ["Ada", "Lin"], "score": [9, 8]}
)
for column_label, series in df.items():
print(column_label, series.tolist())
name ['Ada', 'Lin']
score [9, 8]
当操作需要在同一次循环中同时使用标签和对应的 Series 时,可以选择这种写法。例如,可以分别对每列执行格式化或汇总。如果某项计算可以一次应用于整个 DataFrame,使用 Pandas 的向量化操作可能比逐列处理更清晰。
使用 enumerate() 获取每列的位置和标签
将 df.columns 传给 Python 内置的 enumerate(),即可把每个标签与它在列序列中的从零开始的位置配对。下面的示例会逐列打印位置和标签:
import pandas as pd
df = pd.DataFrame(
{"name": ["Ada", "Lin"], "score": [9, 8]}
)
for position, column_label in enumerate(df.columns):
print(position, column_label)
0 name
1 score
这里,第一列的 position 是 0,第二列是 1,后续列依此类推。它不同于行索引标签:行索引用于标识行,其值不一定是连续整数。需要同时使用列顺序和标签时,可以采用这种写法;如果不需要位置,则使用基本循环或 DataFrame.items() 即可。