我有这段代码:
df = pd.DataFrame(data, columns = ['Name','New_addy','PHONE1','PHONE2','EMAIL'])
def QuestioningMech(df):
for x in df:
print(df[x])
所以我试图迭代 DataFrame,但此代码迭代列。我该如何迭代行?
有几种方法可以迭代 Pandas DataFrame 的行:
1. 使用
iterrows()
:
iterrows()
方法将 DataFrame 作为 (index, Series) 对进行迭代。这是迭代行最常用的方法,因为它可以访问索引和每一行的值。
```python import pandas as pd
df = pd.DataFrame(data, columns=['Name', 'New_addy', 'PHONE1', 'PHONE2', 'EMAIL'])
def QuestioningMech(df): for index, row in df.iterrows(): print(f"Row {index + 1}:") # 打印行号 print(row['Name'], row['PHONE1']) # 访问特定列
QuestioningMech(df) ```
2. 使用
itertuples()
:
itertuples()
方法将 DataFrame 作为命名元组进行迭代。这比
iterrows()
更快,但不能访问索引,并且需要使用属性名访问列值。
```python import pandas as pd
df = pd.DataFrame(data, columns=['Name', 'New_addy', 'PHONE1', 'PHONE2', 'EMAIL'])
def QuestioningMech(df): for row in df.itertuples(): print(row.Name, row.PHONE1) # 使用属性名访问列
QuestioningMech(df) ```
3. 将 DataFrame 转换为列表:
可以使用
values
属性将 DataFrame 转换为 NumPy 数组,然后使用列表推导式迭代每一行。
```python import pandas as pd
df = pd.DataFrame(data, columns=['Name', 'New_addy', 'PHONE1', 'PHONE2', 'EMAIL'])
def QuestioningMech(df): for row in df.values: print(row[0], row[2]) # 使用索引访问列
QuestioningMech(df) ```
哪种方法最好?
-
如果你需要访问索引和每一行的值,
iterrows()
是最好的选择。 -
如果你需要快速迭代行并且不需要索引,
itertuples()
是一个不错的选择。 - 如果你想将 DataFrame 转换为其他数据结构,例如列表,则将 DataFrame 转换为列表是一个不错的选择。
重要提示: 迭代大型 DataFrame 可能会很慢。 如果需要对 DataFrame 执行复杂的操作,请考虑使用 Pandas 的内置函数和矢量化操作,而不是迭代行。 这些函数通常比循环快得多,并且更易于阅读和理解。
标签:python,pandas,dataframe,iterator From: 72469112