python - 将数据转换回具有 nan 值的原始维度
问题描述
我有一个带有日期时间索引的熊猫数据框,以及一个范围列和一个数据列。
df的形状是(4000,3)。
我将数据列作为 np.array 取出,将其转换为 1000 x 4 矩阵,然后删除我有 nan 的行。然后假设我有 22 行 nan,所以我得到了 (1000-22) 行.
然后我将一个函数应用于该矩阵,该函数始终返回与输入矩阵具有相同维度的数据。现在我想将这些输出值插入到原始 df 的新列中。所以我需要重塑矩阵填充行被删除的地方,然后将其插入新列。
但是,我似乎找不到一个好的方法,并且它需要非常快,因为我将它部署在数以千计的数据帧上,其中的数据比本示例中的要多得多。
解决方案
这应该以相当高的效率完成您需要的工作:
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])
您可以忽略开头,因为它只是尝试近似您的数组。
推荐阅读
- c++ - 有没有办法我可以在 c++ 中使用 if 语句来判断一个字符串是否不等于两个名称中的任何一个它给出一个输出,atm 我没有得到它
- python-3.x - Gensim v3.6.0 Word2Vec DeprecationWarning: Call to deprecated `wv`(属性将在 4.0.0 中删除,使用 self 代替)
- java - Word错误率可以帮助分析口吃吗?
- airflow - 在 Airflow 中,如何获取父任务 task_id?
- wordpress - 当我们在wordpress中输入带有图像的站点时,如何填充我们看到的站点的第一页
- c++ - 在 C++ 中,如果一个成员引用在其声明中被初始化,为什么它需要存储空间?
- python - Python / Pandas:如果满足三个条件,则删除重复项
- c# - OnTouchEvent 从未在 Xamarin Android 自定义渲染器中调用
- node.js - discord.js ReferenceError:未定义成员
- flutter - Flutter 图表 tickProviderSpec 到 15 分钟