一文速学-pandas处理dataframe稀疏数据及维度不匹配数据详解(代码片段)

fanstuck fanstuck     2023-03-15     131

关键词:

目录

前言

一、索引缺失

二、负值取正

三.提取数值

四、提取唯一值

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢


前言

众所周知我们获取的第一手数据往往都是比较杂乱无章的,这些文件保存一般都是csv文件或者是excel文件,读取转换成DataFrame还有可能因为缺少列索引或者是各类数据维度不相等而报错。

Pandas的基础数据结构Series和DataFrame。若是还不清楚的可以再去看看我之前的博客详细介绍这两种数据结构的处理方法:

一文速学-数据分析之Pandas数据结构和基本操作代码

一文速学-Pandas实现数值替换、排序、排名、插入和区间切片

一些Pandas基础函数的使用方法:

DataFrame行列表查询操作详解+代码实战

一文速学-Pandas索引重塑实现长宽表数据转换

DataFrame多表合并拼接函数concat、merge参数详解+代码操作展示

Pandas中read_excel函数参数使用详解+实例代码

一文速学-Pandas索引设置操作各类方法详解+代码展示

关于包含在异常值里面的空值和重复值均有三篇博客专门详细介绍了处理他们的方法: 

一文速学-Pandas处理重复值操作各类方法详解+代码展示

一文速学-Pandas处理缺失值操作各类方法详解

一文速学-Pandas异常值检测及处理操作各类方法详解+代码展示

读取成功为DataFrame仍然有很多问题存在,比如列索引缺失,众多NaN数据以及合并计算问题等,这篇文章将具体解决此场景下的内容。


一、索引缺失

读取缺失量较大的数据时,索引并不是能完全覆盖到的。存在着列索引缺失的问题,这是一个比较头疼的问题,使得我们后面的数据特征无法使用:

这是针对机器学习的数据集特征,面对这种情况我们可以通过重新设置索引的方式,倘若特征之间是有规律的话,例如上表5列以后的数据每列的列索引都是features的话那么我们可以通过reindex的方法给它补全索引:

def deal_defect(df,n):
    df_defect=df.iloc[:,n:]
    m=4
    list_columns=[]
    for i in range(df_defect.shape[1]):
        list_columns.append('features%d'%m)
        m=m+1
    df_defect.columns=list_columns
    df_all=pd.concat([df.iloc[:,:n],df_defect],axis=1)
    return df_all
    
deal_defect(df,5)

二、负值取正

若是要对整个DataFrame的值都取负数,并不需要挨个列都转再使用abs函数,读取的DataFrame一般都是object类型不能直接使用abs,需要使用astype将dataframe类型转换:

当数据中带有NaN时是不能直接转int的:

df_fill=df.astype('int')
IntCastingNaNError: Cannot convert non-finite values (NA or inf) to integer

 但是我们转换为float的时候原始数据集又出现了后面带.0的情况:

这里我们要使用到fillna函数,先转为float取绝对值之后再填充为空值之后替换为-1,这样以来-1的位置就是缺失值的位置,以便于我们识别:

def fill_conver(df):
    df_fill=df.astype('float')
    df_fill=abs(df_fill)
    df_fill=df_fill.fillna('')
    df_fill=df_fill.replace('',-1)
    df_fill=df_fill.astype(int)
    return df_fill
fill_conver(df)

三.提取数值

既然有很多空值我们可以采取侧缺将低于一定比例的数据去除,这部分在上篇缺失值处理文章已经谈到这里不再说明。我们最常遇到的情况就是需要处理空值只提去出相应标签下的数值,这里涉及到列索引的选择和合并操作。例如我们只需要特征列偶数列的数值:

def get_features(df):
    list_all_link=[]
    df=df.iloc[:,2:]
    for i in range(df.shape[0]):
        #flag为控制外层循环开关
        flag=1
        for j in range(df.shape[1]):
            if(flag==0):
                break
            if(j%2==0):
                if(df.iloc[i:i+1,j].item()==-1):
                    flag=0
                else:
                    list_all_link.append(list(df.iloc[i:i+1,j]))
    return list_all_link
get_features(df)

四、提取唯一值

如果我们需要只需要取到的数列中的唯一值,需要对数据集进行处理,可以使用ravel()和unique()函数。此时我们还需要注意删掉-1:

def unique_df(df):
    df_features=df.iloc[:,2:]
    unique_series=pd.Series(pd.Series(df_features.iloc[:,[i%2==0 for i in range(len(df_features.columns))]].values.ravel()).unique())
    list_series=list(unique_series.values)
    return list_series
unique_list=unique_df(df)
unique_list.remove(-1)
unique_list

 

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见。

pandas中to_datetime()转换时间序列函数一文详解(代码片段)

...算等操作。基于前两篇文章的基础:一文速学-Pandas中DataFrame转换为时间格式数据与处理一文速学-Pandas处理时间序列数据操作详解 在这两篇文章中基本把pandas操作时间类型数据的一些常规操作都有提及和展示,作为重要... 查看详情

一文速学-gbdt模型算法原理以及实现+python项目实战(代码片段)

目录前言一、GBDT算法概述1.决策树2.Boosting3.梯度提升 使用梯度上升找到最佳参数二、GBDT算法原理1.计算原理2.预测原理三、实例算法实现 1.模型训练阶段1)初始化弱学习器 2)对于建立M棵分类回归树​: 四、Python... 查看详情

Scipy 稀疏矩阵作为 DataFrame 列

】Scipy稀疏矩阵作为DataFrame列【英文标题】:ScipysparsematrixasDataFramecolumn【发布时间】:2017-01-1911:00:01【问题描述】:我正在开发基于pandasDataFrame对象的工具。我想将scipy稀疏矩阵保留为DataFrame的列,而不是将其逐行转换为dtype(\'O\... 查看详情

一文速学-最小二乘法曲线拟合算法详解+项目代码

目录前言一、曲线拟合策略二、最小二乘法理论基础1.残差原理特征< 查看详情

从 SciPy 稀疏矩阵填充 Pandas SparseDataFrame

】从SciPy稀疏矩阵填充PandasSparseDataFrame【英文标题】:PopulateaPandasSparseDataFramefromaSciPySparseMatrix【发布时间】:2013-07-2300:43:21【问题描述】:我注意到Pandas现在有supportforSparseMatricesandArrays。目前,我这样创建DataFrame()s:returnDataFrame... 查看详情

Pandas DataFrame 中每月平均每日记录数

】PandasDataFrame中每月平均每日记录数【英文标题】:AverageofdailycountofrecordspermonthinaPandasDataFrame【发布时间】:2016-01-2519:49:11【问题描述】:我有一个带有TIMESTAMP列的pandasDataFrame,它是datetime64数据类型。请记住,最初此列未设置... 查看详情

Python:pandas.DataFrame.insert ValueError:缓冲区的维数错误

】Python:pandas.DataFrame.insertValueError:缓冲区的维数错误【英文标题】:Python:pandas.DataFrame.insertValueError:Bufferhaswrongnumberofdimensions【发布时间】:2021-10-1807:27:47【问题描述】:在DataFrame中,我想从始终位于特定单词之后的字符串中... 查看详情

pandas.DataFrame.describe() 与 numpy.percentile() NaN 处理

】pandas.DataFrame.describe()与numpy.percentile()NaN处理【英文标题】:pandas.DataFrame.describe()vsnumpy.percentile()NaNhandling【发布时间】:2014-01-0401:22:21【问题描述】:我注意到pandas.DataFrame.describe()和numpy.percentile()处理NaN值的方式有所不同。例... 查看详情

pandas.DataFrame.describe() 与 numpy.percentile() NaN 处理

】pandas.DataFrame.describe()与numpy.percentile()NaN处理【英文标题】:pandas.DataFrame.describe()vsnumpy.percentile()NaNhandling【发布时间】:2014-01-0401:22:21【问题描述】:我注意到pandas.DataFrame.describe()和numpy.percentile()处理NaN值的方式有所不同。例... 查看详情

一文速学-时间序列分析算法之加权移动平均法详解+python代码实现(代码片段)

目录前言一、加权移动平均法1.计算公式2.示例运用3.误差修正点关注,防走丢,如有纰漏之处,请留言指教,非常感谢前言时间序列法并不属于机器学习而是统计分析法,供预测用的历史数据资料有的变化表... 查看详情

pandas基础——一文详不尽(代码片段)

TransformingDataFrames本节主要是将pandas处理数据的基本内容,为后面的内容打好基础。本文大致可以分为探索性分析,数据集如何拆分,数据如何筛选,如何运用符等importpandasaspdDF=pd.DataFrame(xxxx)#我只是想告诉你Dat... 查看详情

大型 Pandas Dataframe 并行处理

】大型PandasDataframe并行处理【英文标题】:LargePandasDataframeparallelprocessing【发布时间】:2016-02-1007:46:16【问题描述】:我正在访问一个非常大的Pandas数据框作为全局变量。此变量通过joblib并行访问。例如。df=db.query("selectid,a_lot_of_... 查看详情

在 Pandas 中更快地处理 Dataframe

】在Pandas中更快地处理Dataframe【英文标题】:FasterprocessingofDataframeinPandas【发布时间】:2015-07-3122:15:35【问题描述】:我正在尝试处理邮政编码不易格式化的非常大的文件(超过10,000个观察值)。我需要将它们全部转换为前5位数... 查看详情

Pandas 和多处理内存管理:将 DataFrame 拆分为多个块

】Pandas和多处理内存管理:将DataFrame拆分为多个块【英文标题】:PandasandMultiprocessingMemoryManagement:SplittingaDataFrameintoMultipleChunks【发布时间】:2017-05-0512:52:30【问题描述】:我必须在一行一行的基础上处理一个巨大的pandas.DataFrame... 查看详情

python的dataframe能不能效率解决这个需求

...D这两个更高维数的数据容器。一个Panel里可以储存若干个dataframe 查看详情

docker常用指令和镜像操作详解一文速学+实例代码(代码片段)

目录前言一、Docker基础命令1.启动docker 2.查看状态 3.关闭docker 4.开机自启 5.查看版本信息 6.查看帮助二、Docker镜像命令1.查看docker镜像 2.搜索镜像搜索不小于10000星的busybox的镜像 format格式化输出 限制搜索输出个数 禁止截... 查看详情

Python Pandas - 如何在具有不同级别数的索引上加入 DataFrames?

】PythonPandas-如何在具有不同级别数的索引上加入DataFrames?【英文标题】:PythonPandas-HowdoIjoinDataFramesonindiceswithdifferentnumberoflevels?【发布时间】:2019-01-1805:57:32【问题描述】:假设我有以下2个DataFrame:df1,其索引为[\'NameID\',\'Date\'... 查看详情

一文速学-时间序列分析算法之指数平滑法详解+python代码实现(代码片段)

...序列分析算法的移动平均法系列讲的很详细清晰了:一文速学-时间序列分析算法之加权移动平均法详解+ 查看详情