pandas.DataFrame新增列、dropna()方法-丢弃含空值的行、列;inf的处理技巧

在Dataframe中新添加一列

直接指明列名,然后赋值就可

import pandas as pd
 
data = pd.DataFrame(columns=['a','b'], data=[[1,2],[3,4]])
data
>>> data
   a  b
0  1  2
1  3  4

添加一列’c‘,赋值为空白值。打印出来

data['c'] = ''
data
>>> data
   a  b c
0  1  2
1  3  4

添加一列‘d',赋值为一个list

data['d'] = [5,6]
data
>>> data
   a  b c  d
0  1  2    5
1  3  4    6

在指定的位置添加新的一列,可以使用insert( )方法。

分别在原来的dataframe的开始和最后添加两列 ’c' 和 ‘d'。参数链接

data.insert(2,'c','')
# 2 :插入的列的位置
# ‘c':待插入列的列名
# ‘ ’:插入的值,这里插入的是空值
 
data
Out[56]: 
   a  b c
0  1  2  
1  3  4  
data.insert(0,'d',[1,2])
 
data
Out[71]: 
   d  a  b c
0  1  1  2  
1  2  3  4  

 pandas.DataFrame 进行新增列操作的五种方法:insert、reindex、loc、obj[‘col’]、concat

新建

import pandas as pd
import numpy as np

data = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns=['a', 'b', 'c'])
data

	 	a 	b 	c
	0 	1 	2 	3
	1 	4 	5 	6
	2 	7 	8 	9

insert方法

第一个参数指定插入列的位置,

第二个参数指定插入列的列名,

第三个参数指定插入列的数据

data.insert(data.shape[1], 'd', 0)
data

		a 	b 	c 	d
	0 	1 	2 	3 	0
	1 	4 	5 	6 	0
	2 	7 	8 	9 	0

obj[‘col’] = value 方法

对 DataFrame 直接赋值

data['d'] = 0
data

	 	a 	b 	c 	d
	0 	1 	2 	3 	0
	1 	4 	5 	6 	0
	2 	7 	8 	9 	0

reindex 方法

使用 reindex 函数,还可以指定缺失值填充的值,不过缺点是要把原有的列名和新列名都加上

data = data.reindex(columns=['a', 'b', 'c', 'd'], fill_value=0)
data

		a 	b 	c 	d
	0 	1 	2 	3 	0
	1 	4 	5 	6 	0
	2 	7 	8 	9 	0

concat 方法

concat 方法是用来拼接数据的,

在这里是利用拼接过程中新建一个包含新列名的空DataFrame,

好处是可以同时新增多个列名。

data = pd.concat([data, pd.DataFrame(columns=['d'])], sort=False)
data

		a 		b 		c 		d
	0 	1.0 	2.0 	3.0 	NaN
	1 	4.0 	5.0 	6.0 	NaN
	2 	7.0 	8.0 	9.0 	NaN

loc 方法

loc 方法和 iloc 方法一样,可以索引 DataFrame 数据,

一般是通过 data.loc[index, col] = value 来进行赋值,

这里利用:来索引全部行再进行赋值。

data.loc[:, 'd'] = 0
data

	 	a 	b 	c 	d
	0 	1 	2 	3 	0
	1 	4 	5 	6 	0
	2 	7 	8 	9 	0

Python-pandas的dropna()方法-丢弃含空值的行、列

0.摘要

dropna()方法,能够找到DataFrame类型数据的空值(缺失值),

将空值所在的行/列删除后,将新的DataFrame作为返回值返回。

1.函数详解

函数形式:

​dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

参数:

  • axis:轴。0或'index',表示按行删除;1或'columns',表示按列删除。
  • how:筛选方式。‘any’,表示该行/列只要有一个以上的空值,就删除该行/列;
  • ‘all’,表示该行/列全部都为空值,就删除该行/列。
  • thresh:非空元素最低数量。int型,默认为None。
  • 如果该行/列中,非空元素数量小于这个值,就删除该行/列。
  • subset:子集。列表,元素为行或者列的索引。
  • 如果axis=0或者‘index’,subset中元素为列的索引;
  • 如果axis=1或者‘column’,subset中元素为行的索引。
  • 由subset限制的子区域,是判断是否删除该行/列的条件判断区域。
  • inplace:是否原地替换。布尔值,默认为False。
  • 如果为True,则在原DataFrame上进行操作,返回值为None。

dataframe中有关inf的处理技巧

numpy中inf的相关文档icon-default.png?t=N7T8https://numpy.org/devdocs/reference/constants.html#numpy.Inf

什么是inf? IEEE 754浮点表示(正)无穷大。 

为什么会产生? 

>>> np.NINF

-inf

>>> np.inf

inf

>>> np.log(0)

-inf

>>> np.array([1,2])/0 #碰到的最多的情况

array([ inf,  inf])

产生inf有什么好处? 

目前没看到有什么好处,只是单纯用inf表示无穷大,方便理解和表示。 

产生inf有什么坏处? 

对用户而言,对inf需要特殊处理,加大了工作量。

为什么需要特殊处理?

因为许多机器学习算法库并不支持对inf的处理。 

怎么处理? 

常见的处理方法:  不处理替换,怎么获取到inf的所在位置并进行填补? 

'''
isinf:显示哪些元素为正或负无穷大

isposinf:显示哪些元素为正无穷大

isneginf:显示哪些元素为负无穷大

isnan:显示哪些元素不是数字

isfinite:显示哪些元素是有限的(不是非数字,正无穷大和负无穷大中的一个)

'''
​
>>> np.isinf(np.inf) #其他函数同理使用,isinf使用最多。

True

>>> np.isinf(np.array([1,np.inf]))

array([False,  True], dtype=bool)

>>>np.isinf(pd.DataFrame(np.array([1,np.inf])))

       0

0  False

1   True

​
>>>s1 = pd.Series([1,2,3,np.inf])

>>>s1

0    1.0

1    2.0

2    3.0

3    NaN

dtype: float64

#对inf填补 999 

>>>s1[np.isinf(s1)] = 999

>>>s1

0    1.0

1    2.0

2    3.0

3  999.0

dtype: float64

#对inf填补np.nan (较为常用)

>>>s1[np.isinf(s1)] = np.nan

>>>s1

0    1.0

1    2.0

2    3.0

3    NaN

dtype: float64

Pandas 处理DataFrame中的inf值

1. 将某1列(series格式)中的 inf 替换为数值

import numpy as np
 
df['Col'][np.isinf(df['Col'])] = -1

2. 将某1列(series格式)中的 inf 替换为NA值

import numpy as np
 
df['Col'][np.isinf(df['Col'])] = np.nan

3. 将整个DataFrame中的 inf 替换为数值(空值同理)

import numpy as np
 
df.replace(np.inf, -1) #替换正inf为-1
 
#替换正负inf为NA,加inplace参数 
df.replace([np.inf, -np.inf], np.nan, inplace=True)

  • 15
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值