[英]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.