gpt4 book ai didi

python - 将字符串拆分为列表并将项目转换为 int

转载 作者:太空狗 更新时间:2023-10-30 00:52:57 27 4
gpt4 key购买 nike

我有一个 pandas 数据框,其中有一列 values,如下所示:

0       16 0
1 7 1 2 0
2 5
3 1
4 18

我想要创建另一列 modified_values,其中包含拆分每个值后我将获得的所有不同数字的列表。新的列将是这样的:

0       [16, 0]
1 [7, 1, 2, 0]
2 [5]
3 [1]
4 [18]

注意此列表中的值应该是int 而不是strings

我知道的事情:

1) 我可以像这样以矢量化方式拆分列df.values.str.split("")。这将给我列表,但列表中的对象将是字符串。我可以在上面添加另一个操作,例如 df.values.str.split("").apply(func to convert values to int) 但不会被矢量化

2) 我可以直接执行此操作 df['modified_values']= df['values'].apply(func that splits as converts to int)

第二个肯定会比第一个慢很多,但我想知道是否可以用矢量化的方式实现同​​样的事情。

最佳答案

native “矢量化”解决方案是不可能的

我强调这一点是因为假设 pd.Series.str 是一个常见的错误方法是向量化的。他们不是。它们以效率为代价提供便利和错误处理。对于仅清洁数据,例如没有 NaN 值,列表理解可能是您的最佳选择:

df = pd.DataFrame({'A': ['16 0', '7 1 2 0', '5', '1', '18']})

df['B'] = [list(map(int, i.split())) for i in df['A']]

print(df)

A B
0 16 0 [16, 0]
1 7 1 2 0 [7, 1, 2, 0]
2 5 [5]
3 1 [1]
4 18 [18]

性能基准测试

为了说明 pd.Series.str 的性能问题,您可以看到对于更大的数据帧,您传递给 Pandas 的操作越多,性能越差:

df = pd.concat([df]*10000)

%timeit [list(map(int, i.split())) for i in df['A']] # 55.6 ms
%timeit [list(map(int, i)) for i in df['A'].str.split()] # 80.2 ms
%timeit df['A'].str.split().apply(lambda x: list(map(int, x))) # 93.6 ms

list 作为 pd.Series 中的元素也是反 Pandas

作为described here , 连续持有列表会给出 2 层指针,不推荐:

Don't do this. Pandas was never designed to hold lists in series / columns. You can concoct expensive workarounds, but these are not recommended.

The main reason holding lists in series is not recommended is you lose the vectorised functionality which goes with using NumPy arrays held in contiguous memory blocks. Your series will be of object dtype, which represents a sequence of pointers, much like list. You will lose benefits in terms of memory and performance, as well as access to optimized Pandas methods.

See also What are the advantages of NumPy over regular Python lists? The arguments in favour of Pandas are the same as for NumPy.

关于python - 将字符串拆分为列表并将项目转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52907094/

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