Pandas DataFrame的迭代方法
参考:iterate through pandas dataframe
在数据分析和数据科学领域,Pandas 是 Python 最受欢迎的库之一。Pandas 提供了 DataFrame 对象,这是一个强大的二维数据结构,类似于 Excel 表格。DataFrame 不仅可以存储数据,还可以进行复杂的数据操作。在处理数据时,经常需要遍历 DataFrame 中的数据,以执行各种操作,如数据清洗、转换等。本文将详细介绍如何在 Pandas 中迭代 DataFrame,并提供多个示例代码,帮助读者更好地理解和应用。
1. 使用 iterrows()
迭代 DataFrame
iterrows()
是 Pandas 中用于迭代 DataFrame 行的一个方法。它返回每行的索引及一个包含行数据的序列。这种方法比较直观,适用于不修改原始数据的场景。
import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Website': ['pandasdataframe.com', 'example.com', 'test.com']}
df = pd.DataFrame(data)
for index, row in df.iterrows():
print(f"Index: {index}, Name: {row['Name']}, Website: {row['Website']}")
Output:
2. 使用 itertuples()
迭代 DataFrame
itertuples()
是另一种迭代 DataFrame 的方法。它返回命名元组,通常比 iterrows()
快,因为它不将行转换为 Series。
import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Website': ['pandasdataframe.com', 'example.com', 'test.com']}
df = pd.DataFrame(data)
for row in df.itertuples():
print(f"Index: {row.Index}, Name: {row.Name}, Website: {row.Website}")
Output:
3. 使用 apply()
函数
apply()
函数可以沿指定轴应用一个函数,常用于对 DataFrame 中的数据进行复杂处理。它不是传统意义上的迭代,但可以实现类似的效果。
import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Website': ['pandasdataframe.com', 'example.com', 'test.com']}
df = pd.DataFrame(data)
def process(row):
return f"{row['Name']} works at {row['Website']}"
df['Description'] = df.apply(process, axis=1)
print(df)
Output:
4. 直接迭代列
有时候我们只需要迭代 DataFrame 的列。直接使用 DataFrame 对象就可以迭代其列。
import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Website': ['pandasdataframe.com', 'example.com', 'test.com']}
df = pd.DataFrame(data)
for column in df:
print(f"Column: {column}")
print(df[column])
Output:
5. 使用 iteritems()
迭代列和值
iteritems()
用于迭代 DataFrame 的列和该列的值。它返回列名和列值的序列。
import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Website': ['pandasdataframe.com', 'example.com', 'test.com']}
df = pd.DataFrame(data)
for label, content in df.iteritems():
print(f"Label: {label}")
print(content)
6. 使用 groupby()
后迭代
groupby()
方法常用于对数据进行分组,然后可以迭代每个分组进行更详细的分析。
import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Department': ['HR', 'HR', 'IT'], 'Website': ['pandasdataframe.com', 'example.com', 'test.com']}
df = pd.DataFrame(data)
for name, group in df.groupby('Department'):
print(f"Department: {name}")
print(group)
Output:
7. 使用 expanding()
和 rolling()
迭代
这两个方法用于生成扩展和滚动的窗口对象,可以对数据进行窗口统计分析。
import pandas as pd
data = {'Value': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
# Expanding window
for index, window in df['Value'].expanding(min_periods=1):
print(f"Index: {index}, Sum: {window.sum()}")
# Rolling window
for index, window in df['Value'].rolling(window=3):
print(f"Index: {index}, Average: {window.mean()}")
8. 使用 pivot_table()
后迭代
pivot_table()
用于创建透视表,之后可以迭代透视表中的数据。
import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Department': ['HR', 'HR', 'IT'], 'Salary': [50000, 60000, 70000]}
df = pd.DataFrame(data)
pivot = df.pivot_table(values='Salary', index='Department', aggfunc='mean')
for index, value in pivot.iterrows():
print(f"Department: {index}, Average Salary: {value['Salary']}")
Output:
9. 使用 merge()
后迭代
合并两个 DataFrame 后,可以迭代合并结果进行进一步分析。
import pandas as pd
data1 = {'ID': [1, 2, 3], 'Name': ['Alice', 'Bob', 'Charlie']}
data2 = {'ID': [1, 2, 3], 'Salary': [50000, 60000, 70000]}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
merged_df = pd.merge(df1, df2, on='ID')
for index, row in merged_df.iterrows():
print(f"ID: {row['ID']}, Name: {row['Name']}, Salary: {row['Salary']}")
Output:
10. 使用 concat()
后迭代
连接两个或多个 DataFrame 后,可以迭代连接结果进行进一步的处理。
import pandas as pd
data1 = {'Name': ['Alice', 'Bob'], 'Website': ['pandasdataframe.com', 'example.com']}
data2 = {'Name': ['Charlie'], 'Website': ['test.com']}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
concatenated_df = pd.concat([df1, df2])
for index, row in concatenated_df.iterrows():
print(f"Name: {row['Name']}, Website: {row['Website']}")
Output:
以上是在 Pandas 中迭代 DataFrame 的一些常见方法及示例。通过这些方法,可以有效地处理和分析数据。在实际应用中,选择合适的迭代方法可以大大提高代码的效率和可读性。