【问题标题】:Replacing values in a Pandas Dataframe替换 Pandas 数据框中的值
【发布时间】: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


【解决方案1】:

你可以用mask

df.mask(df.eq(1), df.index)

输出:

   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

如果您的索引是本示例中的数字,您也可以这样做:

df.mul(df.index, axis=0)

【讨论】:

  • 感谢您的回答。这绝对属于第二类。一旦我得到更多答案,我将发布最有效的答案。
猜你喜欢
  • 2017-03-23
  • 1970-01-01
  • 2018-09-29
  • 2021-09-02
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多