有如下 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 pd inp df pd.dataframe inp print df 上面 輸出 c1 c2 0 10 100 1 11 110 2 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...