Pandas索引操作

Series对象

(一) 增

	import numpy as np
	import pandas as pd
	
	series_1 = pd.Series(range(5),index=['a','b','c','d','e'])
	print(series_1)
	
#	a    0
#	b    1
#	c    2
#	d    3
#	e    4
#	dtype: int64

1. 改变初始数据

不可使用索引位置(索引超出界限)

	series_1['f'] = 999
	print(series_1)
	
#	a      0
#	b      1
#	c      2
#	d      3
#	e      4
#	f    999
#	dtype: int64

2. 生成新的Series对象

	res = series_1.append(pd.Series({'g':888}))
	print(res,type(res),res is series_1,sep='\n')

#	a      0
#	b      1
#	c      2
#	d      3
#	e      4
#	f    999
#	g    888
#	dtype: int64
#	<class 'pandas.core.series.Series'>
#	False

(二) 删

1. del

	series_2 = pd.Series(range(5), index=['a', 'b', 'c', 'd', 'e'])
	del series_2['c']
	print(series_2)
	
# result :
a    0
b    1
d    3
e    4
dtype: int64

2. drop 生成新对象(不改变源对象)

(1)删除单条数据
	res = series_2.drop('a')
	print(res,res is series_2,sep='\n')
# result :
b    1
d    3
e    4
dtype: int64	
##################################################################
(2)删除多条数据
	res = series_2.drop(['b','d'])
	print(res,res is series_2,sep='\n')
# result :
a    0
e    4
dtype: int64
False
(3) 使用inplace属性为True不生成新对象
	res = series_2.drop('a',inplace=True) # 此时res为None

(三) 改

	series_3 = pd.Series(range(5), index=['a', 'b', 'c', 'd', 'e'])
	print(series_3)
# result:
a    0
b    1
c    2
d    3
e    4
dtype: int64

1. 位置索引

	series_3[4] = 9
	print(series_3)
a    0
b    1
c    2
d    3
e    9
dtype: int64

2. 标签索引

	series_3['c'] = 5
	print(series_3)
a    0
b    1
c    5
d    3
e    4
dtype: int64

(四) 查

	import numpy as np
	import pandas as pd
	
	series_4 = pd.Series(np.arange(5),index=['a','b','c','d','e'])
	print(series_4)
#	a    0
#	b    1
#	c    2
#	d    3
#	e    4
#	dtype: int32

1. 获取单个或连续数据

索引位置

	print('''series_4[4] = ''',series_4[4])
#	reult
series_4[4] =  4

索引名称

	print('''series_4['c'] = ''',series_4['c'])
#	result
series_4['c'] =  2

位置索引 切片

不包含末位

	series_4[2:4] # 数学表示为 [2,4) OR [2,3]
	另一种写法 : series_4.iloc[0:3])
#	c    2
#	d    3
#	dtype: int32

名称索引 切片

包含末位

	series_4['a':'c'] # 数学表示为 ['a','c']
	另一种写法 : series_4.loc['a':'c']
#	a    0
#	b    1
#	c    2
#	dtype: int32

2. 获取非连续数据

不连续 位置索引

	print(series_4[[0,2,4]])

#	a    0
#	c    2
#	e    4
#	dtype: int32

不连续 名称索引

	print(series_4[['b','d']])
	
#	b    1
#	d    3
#	dtype: int32

布尔索引

	print(series_4[series_4 > 2])
	# series_4 > 2 为布尔型Series对象
	# series_4[series_4 > 2] 获取结果为True的数据
#	d    3
#	e    4
#	dtype: int32

DataFrame对象

(一)增

	import numpy as np
	import pandas as pd
	
	df1 = pd.DataFrame(np.arange(12).reshape(3,4),index=[1,2,3],columns=['a','b','c','d'])
	print(df1)
	
	   a  b   c   d
	1  0  1   2   3
	2  4  5   6   7
	3  8  9  10  11

增加列

(1) 方式一 : 
	df1[4] = 9
	print('df1 : ',df1,sep = '\n')
	
# result:
	df1 :
	   a  b   c   d  4
	1  0  1   2   3  9
	2  4  5   6   7  9
	3  8  9  10  11  9
	
(2) 方式二 : 	
	df1[5] = [11,22,33]
	print('df1 : ',df1,sep = '\n')
# result:
	df1 : 
	   a  b   c   d  4   5
	1  0  1   2   3  9  11
	2  4  5   6   7  9  22
	3  8  9  10  11  9  33
	
(3) 方法三 : 使用insert方法
	df1.insert(0,'e',[9,99,999]) 
	# 在0位置添加 列 e ,其value为 [9,99,999]
	print('df1 : ',df1,sep = '\n')

# result:
	df1 : 
     e  a  b   c   d  4   5
1    9  0  1   2   3  9  11
2   99  4  5   6   7  9  22
3  999  8  9  10  11  9  33

增加行

(1) 方法一 : 标签索引loc [works on labels in the index]
	df1.loc['z'] = [1,1,1,1]
	df1.loc['y'] = 1
	print(df1)

# result :
	   a  b   c   d
	1  0  1   2   3
	2  4  5   6   7
	3  8  9  10  11
	z  1  1   1   1
	y  1  1   1   1
(2) 方法二 : 生成新的DataFrame对象
	res = df1.append({'a':'a'},ignore_index=True) # 生成新的DataFrame对象
	print(res,res is df1,sep='\n')

# result : 
	   a    b     c     d
	0  0  1.0   2.0   3.0
	1  4  5.0   6.0   7.0
	2  8  9.0  10.0  11.0
	3  a  NaN   NaN   NaN
	False

(二)删

	import numpy as np
	import pandas as pd
	
	df2 = pd.DataFrame(np.arange(12).reshape(3,4),index=[1,2,3],columns=['a','b','c','d'])
	print(df2)
	
df2:	
   a  b   c   d
1  0  1   2   3
2  4  5   6   7
3  8  9  10  11
#############################################################################################
	1.删除列
		(1)	del df2['c']
	# result(df2)
	   a  b   d
	1  0  1   3
	2  4  5   7
	3  8  9  11
		(2) df2.drop('b',axis=1) 
		# drop默认删除行(即axis=0),生成新对象
		(3) df2.drop(['b','d'],axis='columns')
		# axis='columns'与axis=1效果相同
	2.删除行
		df2.drop([1,3])

(三) 改

	df3 = pd.DataFrame(np.arange(12).reshape(3,4),index=['A','B','C'],columns=['a','b','c','d'])
	print(df3)
###########RESULT##############
   a  b   c   d
A  0  1   2   3
B  4  5   6   7
C  8  9  10  11

1. 属性(only column)

	df3.a = 9
###########RESULT##############
   a  b   c   d
A  9  1   2   3
B  9  5   6   7
C  9  9  10  11

	df3.a = [1,11,111]
###########RESULT##############
     a  b   c   d
A    1  1   2   3
B   11  5   6   7
C  111  9  10  11

2. 标签索引(only column)

若中括号内无该索引,便增加新的一列

	df3['b'] = 9
###########RESULT##############
   a  b   c   d
A  0  9   2   3
B  4  9   6   7
C  8  9  10  11

	df3['b'] = [1,11,111]
###########RESULT##############
   a    b   c   d
A  0    1   2   3
B  4   11   6   7
C  8  111  10  11

3. loc

1. 修改一行
	df3.loc['A'] = [9,99,999,9999] # df3.loc['A'] = 9
2. 修改具体某一位置
	df3.loc['B','c'] = 666
###########RESULT##############
   a   b    c     d
A  9  99  999  9999
B  4   5  666     7
C  8   9   10    11

(四) 查

	df4 = pd.DataFrame(np.arange(12).reshape(3,4),index=['A','B','C'],columns=['a','b','c','d'])
###################df4###########################
   a  b   c   d
A  0  1   2   3
B  4  5   6   7
C  8  9  10  11

1. 获取单列

(1) print(df4['c'])
###########RESULT##############
A     2
B     6
C    10
Name: c, dtype: int32

(2) print(df4[['c']])
###########RESULT##############
    c
A   2
B   6
C  10

2. 获取单个值

(1) print(df4['c']['B']) ## 列在前,行在后
###########RESULT##############
6
(2) print(df4.loc['B', 'c'])
###########RESULT##############
6

3. 获取多列

	print(df4[['b', 'd']])
###########RESULT##############
   b   d
A  1   3
B  5   7
C  9  11

4. 获取多行(切片)

	print(df4[:2]) 		# 获取 0,1 两行
###########RESULT##############
   a  b  c  d
A  0  1  2  3
B  4  5  6  7

5. 获取多行多列

	df4.loc['A':'B','b':'c']	# 获取 A至B行,b至c列
	df4.iloc[0:2,1:3]			# 获取 A至B行,b至c列
###########RESULT##############
   b  c
A  1  2
B  5  6
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值