我正在使用資料幀構建資料增強管道。我創建了一個函式,h3_int它接受一個 int 輸入并將一列十六進制值附加到資料幀。下面是實作h3_int:
from h3.unstable import vect
def h3_int(df, level):
df['h3_' str(level)] = vect.geo_to_h3(df.lat.values, df.lng.values, level).tolist()
return df
df由 alng和lat列組成:
lat lng
0 43.64617 -79.42451
1 43.64105 -79.37628
2 43.66724 -79.41598
3 43.69602 -79.45468
4 43.66890 -79.32592
... ... ...
9515 36.10644 -115.16711
9516 36.00814 -115.17496
9517 36.10711 -115.16607
9518 36.03119 -115.05352
9519 36.13554 -115.11541
的簡單用法h3_int:
df.pipe(h3_int, 8)
由于輸入是動態的,我也想動態生成管道,但我一直難以實作這一點。
編碼,
(df.pipe(h3_int, i) for i in range(8, 10))
回傳:
<generator object <genexpr> at 0x7fd4858557b0>
盡管,
(df.pipe((h3_int, i) for i in range(8, 10)))
引發例外:
TypeError: 'generator' object is not callable
在熊貓中實作動態管道的正確方法是什么?不幸的是,我發現檔案和 Stack Overflow 缺乏答案。
uj5u.com熱心網友回復:
generator如錯誤訊息所示,在括號內使用串列推導回傳 a ,它不可索引。相反,你可以使用方括號來創建一個串列,這是可轉位:
>>> [df.pipe(h3_int, i) for i in range(8, 9)][0]
lat lng h3_8
0 43.64617 -79.42451 613256717813153791
1 43.64105 -79.37628 613256717559398399
2 43.66724 -79.41598 613256718316470271
3 43.69602 -79.45468 613256716607291391
4 43.66890 -79.32592 613256718037549055
5 36.10644 -115.16711 613220086766895103
6 36.00814 -115.17496 613220073288499199
7 36.10711 -115.16607 613220086766895103
8 36.03119 -115.05352 613220075656183807
9 36.13554 -115.11541 613220087052107775
請注意,df已就地修改,因為您的函式h3_int在修改之前不會復制它。這還不錯,只是要記住一些事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/362567.html
