首页 > 解决方案 > 将数据转换回具有 nan 值的原始维度

问题描述

我有一个带有日期时间索引的熊猫数据框,以及一个范围列和一个数据列。

df的形状是(4000,3)。

我将数据列作为 np.array 取出,将其转换为 1000 x 4 矩阵,然后删除我有 nan 的行。然后假设我有 22 行 nan,所以我得到了 (1000-22) 行.

然后我将一个函数应用于该矩阵,该函数始终返回与输入矩阵具有相同维度的数据。现在我想将这些输出值插入到原始 df 的新列中。所以我需要重塑矩阵填充行被删除的地方,然后将其插入新列。

但是,我似乎找不到一个好的方法,并且它需要非常快,因为我将它部署在数以千计的数据帧上,其中的数据比本示例中的要多得多。

标签: pythonpandasnumpy

解决方案


这应该以相当高的效率完成您需要的工作:

import numpy as np
import pandas as pd
import random
c1=np.random.choice(range(1,20),1000)
c2=np.random.choice(range(1,20),1000)
c3=np.random.choice(range(1,20),1000)
c4=np.random.choice(range(1,20),1000)
df=pd.DataFrame({'col1':c1,'col2':c2,'col3':c3, 'col4':c4})
df=df.replace(19, np.nan)
arr= np.array(df)
###### Functional Portion #######
naMask=np.isnan(arr)
arr1=arr[~np.isnan(arr)] #or however you are dropping nan values#
### Apply your function to arr1 yeilding arr2 ###
np.place(arr, naMask==True, [np.nan])
np.place(arr, naMask==False, [arr2])

您可以忽略开头,因为它只是尝试近似您的数组。


推荐阅读