【发布时间】:2020-04-27 17:28:37
【问题描述】:
我有一个数据框(名为 df),如下所示:
s01 s03 s06 s07 s08
0 1 1 1 1 1
1 1 1 1 1 1
2 0 1 1 0 1
3 0 0 1 1 0
4 0 0 0 1 1
我想用它的索引值替换所有的。
最终的结果应该是这样的:
s01 s03 s06 s07 s08
0 0 0 0 0 0
1 1 1 1 1 1
2 0 2 2 0 2
3 0 0 3 3 0
4 0 0 0 4 4
这只是一个示例。真实的数据框有数千行和数千列。 当务之急是要有一个能尽快修改数据的高效代码。
我想到了 3 种可能的方法来解决这个问题:
使用 2 个 'for' 循环和一个 'if' 语句并直接循环遍历 panda 对象或将数据转换为 2D numpy 数组并循环遍历。
在 pandas 数据帧上使用某种 pandas 内置过滤功能。
将数据帧转换为二维 Numpy 数组并使用某种 numpy 内置函数来修改数据。
哪种方式最省时?
有没有其他更高效的方法,我还没有想到?
谢谢
【问题讨论】:
-
要考虑真正加快速度的其他方法是使用适合您的数据的 dtype,因此如果您只使用小于 15 的数字,请使用“int8”。依此类推,因为默认数据类型是 int 64。使用 df.info() 来查看。这是一个例子 df['s01'] = np.zeros(len(df), dtype='int8')
-
嗨,压迫者。一开始,我也是这么想的。事实上,行数在 3000-4000 之间,所以 int 64 类型就可以了。问题是我从 numpy 知道,整数的矩阵乘法比浮点数需要更长的时间。这是因为 numpy 对整数和浮点数有不同的方法,显然使用浮点数更省时。由于 pandas 是围绕 numpy 构建的,所以我不知道将其转换为 ints 是个好主意。感谢您的建议。
标签: python pandas numpy dataframe editing