在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的相关文档https://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)