我想遍歷pandas DataFrame中的每一行,並對每行中的元素執行一些操作。對熊貓每一行的操作DataFrame
現在我有
for row in df.iterrows():
if row['col'] > 1.5:
doSomething
,但它告訴我,「元組索引必須是整數,不能海峽」。如何在特定行中訪問我想要的列?
我想遍歷pandas DataFrame中的每一行,並對每行中的元素執行一些操作。對熊貓每一行的操作DataFrame
現在我有
for row in df.iterrows():
if row['col'] > 1.5:
doSomething
,但它告訴我,「元組索引必須是整數,不能海峽」。如何在特定行中訪問我想要的列?
iterrows
yield(index,Series)對。因此,使用方法:
for index, row in df.iterrows():
if row['col'] > 1.5:
doSomething
但是請注意,這a DataFrame is a primarily column-based data structure,所以 您將獲得更好的性能,如果你可以構建圍繞逐列 操作你的代碼,而不是行操作。
謝謝!這些對是不可變的,對嗎?有沒有一種方法可以重寫列中的元素? – user3264659 2014-10-07 19:57:14
EdChum的方法''df.loc [df ['col']> 1.5,'col'] = doSomething'會更好,假設'doSomething'是一個數字。如果不是,你將不得不更詳細地解釋「doSomething」是什麼。 – unutbu 2014-10-07 20:00:02
也許最簡單的解決方案是使用所述APPLYMAP或APPLY該函數適用於整個數據集的每個數據值類函數。
您可以有幾種方法執行此:
df.applymap(someFunction)
或
df[["YourColumns"]].apply(someFunction)
環節都低於:
我會質疑爲什麼這樣做?使用熊貓的重點在於嘗試在整個系列或數據框上執行操作。如果你只想在符合條件的行上執行一些操作,那麼'df.loc [df ['col']> 1.5,'col'] = doSomething'將獲得相同的結果,並且會快速起泡因爲它會被矢量化 – EdChum 2014-10-07 19:57:52
沒關係,太好了。如果它不大於1.5,我會在哪裏放置一個備用的doSomething? – user3264659 2014-10-07 20:06:19
你可以做一個'np.where'或者只是2個語句,所以'df ['col'] = np.where(df ['col']> 1.5,doSomething,doSomethingElse)'或者爲另一個語句添加另一個語句條件'df.loc [df ['col'] <= 1.5,'col'] = doSomethingElse' – EdChum 2014-10-07 20:25:27