Pandas - 每列删除 NaN 并用 0 快速填充?

Pandas - Drop NaN's per column and pad with 0 fast?

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

对于 LSTM,我想

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

但是,请注意,并非每一列都具有相同数量的值。有些已经很多了,有些还 none。生成值的时间戳也是列特定的。我确实通过以下代码实现了结果。但是,由于代码真的很慢(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)

你能试试看这是否更快吗?

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

然后您可以 select 使用 dummydata.loc[0:100, :]

仅前 100 行