- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个 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)
第二个肯定会比第一个慢很多,但我想知道是否可以用矢量化的方式实现同样的事情。
最佳答案
我强调这一点是因为假设 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 likelist
. 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/
我有一个数组列表: ArrayList allText = new ArrayList(); 其内容是这样的: [Alabama - Montgomery, Alaska - Juneau, Ariz
我有一个 timestamp 格式的开始和结束时间。我想将它们分成多个时间段,例如 1 小时。 $t1 = strtotime('2010-05-06 12:00:00'); $t2 = strtot
我需要将 span10 分成 3 列,但我无法将它们排列起来。我应该在 span10 中添加一个 span12 还是使用 offset 还是??
我有一个时间序列。我想从早上 8 点到第二天早上 7:59 分成 24 小时的区 block 。我知道如何按日期分组,但我尝试过使用 TimeGroupers 和 DateOffsets 处理这个 8
我收到“街道号码邮政编码城市”形式的地址(作为字符串)。我想要做的是将街道和号码与邮政编码和城市分开。通常你可以按空格分割。但有些街道名称中也有空格,例如:“Emile Van Ermengemlaa
我有一个用户列表。其中一些用户处于第一状态,而其他用户处于第二状态。所以我想要的是将这个列表显示为首先,它按排序顺序显示存在 = 1 的用户,然后按排序顺序显示存在 = 2 的用户。这里的排序是根据用
我感觉我搜索了整个网络,但找不到一种方法将不同高度的 div 很好地划分为 3 列,就像 http://www.ing.nl 上那样 headertekst headerteksttesth
Bootstrap 3 按钮下拉菜单出现问题。你可以在这里看到我的两个例子: http://www.bootply.com/W1dLusilMk http://www.bootply.com/GGBv
我在 php 中执行以下操作 foreach($QuestionAsekd as $k => $v){ $grp_name = $v['NAME']; $groupValues[$gr
我找到了一种用pandas解析html的绝妙方法。我的数据格式有点奇怪(见下文)。我想将这些数据拆分为 2 个单独的数据帧。 注意每个单元格如何由,分隔...是否有任何真正有效的方法来分割所有这些单元
HTML 看起来像这样,但我不允许对其进行更改。我只能编写 CSS 将其变成 2 列。 Povezave www.behance.net www.kiberpipa.org www.o
假设我有以下数据框“A” utilization utilization_billable service 1
我需要将 2 个文本框拉伸(stretch)到 100% 的浏览器宽度,以及一个提交按钮。所有三个都应该在一行中,我试图拉伸(stretch)它但它没有发生......有什么想法吗? 代码: .sea
我是一名优秀的程序员,十分优秀!