如何在PythonPandas中动态生成Pipes?
How to dynamically generate Pipes in Python Pandas?
我正在使用数据帧构建数据扩充管道。我创建了一个函数 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
由 lng
和 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))
returns:
<generator object <genexpr> at 0x7fd4858557b0>
同时,
(df.pipe((h3_int, i) for i in range(8, 10)))
引发异常:
TypeError: 'generator' object is not callable
在 pandas 中实现动态管道的正确方法是什么? 不幸的是,我发现文档和 Stack Overflow 缺少答案。
使用括号内的列表理解 returns a generator
,如错误消息所示,它不可索引。相反,您可以使用方括号创建一个列表,该列表 是 可索引的:
>>> [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
在修改之前没有复制它。这还不错,只是要记住。
我正在使用数据帧构建数据扩充管道。我创建了一个函数 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
由 lng
和 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))
returns:
<generator object <genexpr> at 0x7fd4858557b0>
同时,
(df.pipe((h3_int, i) for i in range(8, 10)))
引发异常:
TypeError: 'generator' object is not callable
在 pandas 中实现动态管道的正确方法是什么? 不幸的是,我发现文档和 Stack Overflow 缺少答案。
使用括号内的列表理解 returns a generator
,如错误消息所示,它不可索引。相反,您可以使用方括号创建一个列表,该列表 是 可索引的:
>>> [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
在修改之前没有复制它。这还不错,只是要记住。