有如下 pandas dataframe:
import pandas as pd
inp = [, , ]
df = pd.dataframe(inp)
print df
上面**輸出:
c1 c2
0 10 100
1 11 110
2 12 120
現在需要遍歷上面dataframe的行。對於每一行,都希望能夠通過列名訪問對應的元素(單元格中的值)。也就是說,需要類似如下的功能:
for row in df.rows:
print row['c1'], row['c2']
pandas 可以這樣做嗎?
我找到了similar question。但這並不能給我需要的答案,裡面提到:
for date, row in df.t.iteritems():
要麼
for row in df.iterrows():
但是我不明白row
物件是什麼,以及我如何使用它。
要以 pandas 的方式迭代遍歷dataframe的行,可以使用:
itertuples()
應該比iterrows()
快
但請注意,根據文件(目前 pandas 0.19.1):
def valuation_formula(x, y):
return x * y * 0.5
您可以使用df.iloc函式,如下所示:
for i in range(0, len(df)):
print df.iloc[i]['c1'], df.iloc[i]['c2']
您可以編寫自己的實現namedtuple
的迭代器
from collections import namedtuple
def myiter(d, cols=none):
if cols is none:
v = d.values.tolist()
cols = d.columns.values.tolist()
else:
j = [d.columns.get_loc(c) for c in cols]
v = d.values[:, j].tolist()
n = namedtuple('mytuple', cols)
for line in iter(v):
yield n(*line)
這相當於pd.dataframe.itertuples
,但是效率更高。
將自定義函式用於給定的dataframe:
list(myiter(df))
[mytuple(c1=10, c2=100), mytuple(c1=11, c2=110), mytuple(c1=12, c2=120)]
或與pd.dataframe.itertuples
:
list(df.itertuples(index=false))
[pandas(c1=10, c2=100), pandas(c1=11, c2=110), pandas(c1=12, c2=120)]
全面的測試
我們測試了所有可用列:
在pandas中遍歷DataFrame行
有如下 pandas dataframe import pandas as pdinp df pd.dataframe inp print df上面 輸出 c1 c20 10 1001 11 1102 12 120現在需要遍歷上面dataframe的行。對於每一行,都希望能夠通過列名訪問對應的元素 ...
pandas批量讀取csv生成dataframe
此方法用來將資料集合並 import pandas as pd import glob import os pathr r d xx xx 批量檔案所在路徑 file sorted glob.glob os.path.join pathr,csv key lambda name int name 8...
pandas中遍歷dataframe的每乙個元素
假如有乙個需求場景需要遍歷乙個csv或excel中的每乙個元素,判斷這個元素是否含有某個關鍵字 那麼可以用python的pandas庫來實現。方法一 import pandas as pd data str ewt earw agter awetg aeorgh dataframe1 pd.data...