簡體   English   中英

在Python中遍歷數據框的更優雅的方法

[英]More elegant way to loop through a dataframe in Python

對於一個迭代,我們可以遍歷使用

for item in items:

但是,如果我並排有兩個可迭代對象,例如考慮一個具有2列的pandas數據框。 我可以使用上述方法遍歷一列,但是還有一種更優雅的方法可以同時遍歷兩列嗎?

import pandas as pd
df = pd.DataFrame({'col 1': [1,2,3,4,5], 'col 2': [6,7,8,9,10]})
i = 0
for j in df['col 1']:
    print(j)
    print(df['col 2'][i])
    i += 1

謝謝!

zip內置函數創建可迭代的對象,這些可迭代對象將您傳遞的所有參數作為參數進行匯總,因此這可以作為替代方案:

import pandas as pd
df = pd.DataFrame({'col 1': [1,2,3,4,5], 'col 2': [6,7,8,9,10]})
for i,j in zip(df['col 1'], df['col 2']):
    print(i)
    print(j)

輸出:

1
6
2
7
3
8
4
9
5
10

您可以遍歷整行,這更加優雅:

for index, row in df.iterrows():
    print(row['col 1'], row['col 2'])

使用DataFrame.itertuples()方法可同時遍歷兩列:

for i, j in df[['col 1', 'col 2']].itertuples(index=False):
    print(i)
    print(j)

您已經獲得了一些很好的答案。 但是,我也想為您提供一種完全不同的方法,該方法可能更加優雅(取決於您的最終目標是什么)。

作為一般經驗法則,您要避免循環遍歷數據框的行。 這往往很慢,通常有更好的方法。 嘗試將您的思想轉變為將函數應用於整個“向量”(數據框列的花式單詞)。

看一下這個:

import pandas as pd
import numpy as np

df = pd.DataFrame({'col 1': [1,2,3,4,5], 'col 2': [6,7,8,9,10]})

def sum_2_cols(col1,col2):
    return col1 + col2

df['new_col'] = np.vectorize(sum_2_cols)(df['col 1'], df['col 2'])

np.vectorize方法非常強大,靈活且快速。 它允許您將自己的功能應用於數據框,並且往往表現得很好。 嘗試一下,您可能會得到啟發,以其他方式解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM