pandas入门之Series和DataFrame
1、Series
Series的list特性
Series是pandas内置的一种类似一维数组的对象,数据列具有许多list的特性,如切片。同时具有与之相关的标签列index一一对应。
input:obj = Series([11, 22, 33, 44])
input:
obj = Series([11, 22, 33, 44],index=[1,2,3,4])
obj
output:
111
222
333
444
左边为索引index,右边为值values。在没有指定index时,默认index为从0开始自增。可以通过index和values属性获得其数组的表现形式,如obj.index。
input:
obj[1]
output:
11
input:
li = [1,2,3]
obj[li]
output:
111
222
333
input:
obj[[True,True,False,True]]
output:
111
222
444
input:
obj>23
output:
1False
2False
3True
4True
Series可以通过索引的方式选取Series中的单个或一组值,即可以传入索引值数组,也可以传入与Series长度相等的boolean数组。
支持NumPy数组运算,并保留索引和值之间的链接。
Series的dict特性
input: '22' in obj
output: True
input:
di = {
1:101,
2:202,
3:303
}
Series(di)
output:
1101
2202
3303
还可以将Series看成是一个定长的有序字典,同时也可以利用字典来创建Series,字典的index即对应Series的index。
##数据对齐功能
input:
obj = Series([4,7,9,3], index=['b','d','c','a'])
obj2 = Series([3,3,3,3], index=['a','c','d','z'])
obj+obj2
output:
a 6.0
b NaN
c 12.0
d 10.0
z NaN
dtype: float64
在对两个Series进行操作时,只要某个index对应的值缺失一次,即结果为NaN。pandas中的isnull和notnull函数可以检测确实数据。
Series具有name和index.那么属性,在赋值后可以显示出来。
2、DataFrame
DataFrame是一个表格型的数据结构,含有一组有序的列,每列可以是不同的类型,我的理解是每一列是一个Series,DataFrame的index为所有的列共享并一一对应。
DataFrame既有行索引也有列索引,可以视为由Series组成的字典。
# 利用字典创建df
data = {
'city':['xm','xm','fz'],
'year':[2000,2001,2000],
'pop':[15,16,20]
}
# 嵌套字典创建df时,外键作为列,内键作为行,可以转置改变
data2 = {
'city':{0:'xm',1:'xm'},
'year':{0:2000,1:2001},
'pop': {0:15, 1:16}
}
frame = DataFrame(data)
frame
city
year
pop
0
xm
2000
15
1
xm
2001
16
2
fz
2000
20
# 手动为df的列指定顺序,如果原df的列不包括某个index值,则这一列都视为缺失,如下debt
frame2=DataFrame(data, columns=['year','city','pop','debt'],index=[1,2,3])
frame2
year
city
pop
debt
1
2000
xm
15
NaN
2
2001
xm
16
NaN
3
2000
fz
20
NaN
# DataFrame的一列对应一个series
# 返回的series拥有原DF相同的索引
# 即拥有相同引用,而不是拷贝
city=frame2['city']
city
1 xm
2 xm
3 fz
Name: city, dtype: object
# 列赋值,可以传入单个值也可以传入与df长度相同的数组
frame['new'] = 100
frame
# frame['new'] = [100, 200, 300] 按顺序进行赋值
city
year
pop
new
0
xm
2000
15
100
1
xm
2001
16
100
2
fz
2000
20
100
ps:
python中del关键字,python具有垃圾回收机制,因此del删除的是引用,而不是内存地址。