【问题标题】:Pandas - Drop NaN's per column and pad with 0 fast?Pandas - 每列删除 NaN 并用 0 快速填充?
【发布时间】:2020-12-30 17:50:27
【问题描述】:

我有一个数据框,如下所示,有数万行和一千列:

对于 LSTM,我想

  1. 仅提取每列的值,
  2. 将它们放在数据框的开头并
  3. 在值开始到索引 99 之前填充 0。

但是,请注意,并非每一列都有相同数量的值。有些人已经很多了,有些人还没有。此外,在哪个时间戳上生成值是特定于列的。我确实使用以下代码实现了结果。但是,由于代码确实很慢(700 小时),我正在寻找一种可以更快地执行计算逻辑的可能性。需要很长时间,因为我想每小时计算一次这种结果从 2008 年到 2020 年的时间戳。

有什么方法可以显着加快代码速度?

df1=pd.DataFrame(index=range(100),columns=dummydata.columns)
for j in dummydata.columns:
    df1[j]=dummydata[(dummydata.index<=i)][j].dropna().iloc[-T:].iloc[::-1].reset_index(drop=True)
df1=df1.fillna(0).reset_index(drop=True)

【问题讨论】:

  • 您能否提供一些示例数据以及预期输出?当原始结果未知时,很难提供答案。另外,iT是什么?
  • 抱歉,该代码位是更大代码的一部分。 i 是 for 循环中的迭代器,并按时间顺序遍历所有时间戳。 T = 100。

标签: python pandas lstm zero-padding


【解决方案1】:

你可以试试这个看看是否更快?

dummydata.apply(lambda x: pd.Series(x.dropna().values)).fillna(0)

然后你可以使用dummydata.loc[0:100, :]只选择前100行

【讨论】:

  • 谢谢 - 效果很好,而且很快就能达到预期的效果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 2019-12-26
  • 2021-12-14
相关资源
最近更新 更多