gpt4 book ai didi

python - 使用矢量化 Pandas 函数向行添加多个项目,而不是 iterrows?

转载 作者:太空宇宙 更新时间:2023-11-04 03:47:15 25 4
gpt4 key购买 nike

我有一个相当大的生物信息学数据集,我正在使用 pandas 进行处理。它看起来像这样:

>>> df = pd.DataFrame([['a=1|b=4', 'a=2|b=3', 'a=1|b=1'], 
[None]*3, [None]*3], index=['metadata', 'a', 'b']).T
>>> df
metadata a b
0 a=1|b=4 None None
1 a=2|b=3 None None
2 a=1|b=1 None None

我想从“元数据”列中提取元数据并将其放入 a 和 b 列(是的,生物信息学文件格式很糟糕)。我目前这样做的方式是使用 df.iterrows():

>>> def make_dict(string):
return dict([kv.split('=') for kv in string.split('|')])

>>> for idx, row in df.iterrows():
for k, v in make_dict(row['metadata']).iteritems():
df[k][idx] = v

>>> df
metadata a b
0 a=1|b=4 1 4
1 a=2|b=3 2 3
2 a=1|b=1 1 1

这可行,但对于大型数据集来说非常慢。我的问题是:有没有办法在不使用 iterrows、使用矢量化 Pandas 函数的情况下获得相同的结果,并获得相同的结果?

最佳答案

这应该会更快

In [124]: regex = r'\w=(\d+)\|\w=(\d+)'

In [127]: df[['a', 'b']] = df.metadata.str.extract(regex)

In [128]: df
Out[128]:
metadata a b
0 a=1|b=4 1 4
1 a=2|b=3 2 3
2 a=1|b=1 1 1

[3 rows x 3 columns]

编辑:

有趣,看起来它实际上更慢,但我怀疑这会很好地扩展

In [131]: %%timeit
.....: df[['a', 'b']] = df.metadata.str.extract(regex)
.....:
1000 loops, best of 3: 973 µs per loop

In [135]: %%timeit
for idx, row in df.iterrows():
for k, v in make_dict(row['metadata']).items():
df[k][idx] = v
.....:
1000 loops, best of 3: 440 µs per loop

关于python - 使用矢量化 Pandas 函数向行添加多个项目,而不是 iterrows?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23117627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com