一、pandas
pandas数据结构主要分类
类别描述创建
series类似一维数组pd.Series()dataframe类似多维数组pd.Dataframe()
series:数据列 dataframe:数据表
1、pandas的数据结构–series(数据列)
创建series
通过列表创建 series
import pandas
as pd
new_list
= [1,2,3,4]
s1
= pd
.Series
(new_list
)
s2
= pd
.Series
(new_list
,index
=list('abcd'))
print(s1
)
print(s2
)
通过数组创建series
arr1
= np
.arange
(8)
print(arr1
)
s3
= pd
.Series
(arr1
)
print(s3
)
通过字典创建series
s4
= pd
.Series
({'name':'张','age':18,'gender':'第三性别'})
print('s4',s4
)
print(s4
.values
)
print(s4
.index
)
注意点:
1、可以通过字典创建series对象
2、字典的键名,充当的是索引,字典的值充当的是series对象的值
series对象的相关属性
print('series对象的数据',s3
.data
)
print('series对象的数据',s3
.values
)
print('s1的数据',s1
.values
)
print('series对象的索引',s3
.index
)
print('s2对象的索引',s2
.index
)
注意点:
1、data返回的是一个内存对象
2、values返回的是一个创建series 的数组
3、index返回的是series对象的索引,注意,默认索引是RangeIndex
通过索引名获取数据
s4
= pd
.Series
({'name':'张','age':18,'gender':'第三性别'})
print(s4
)
print(s4
.values
)
print(s4
.index
)
print('获取的是姓名',s4
['name'])
print('获取的是姓名',s4
[2])
切片
1.获取的是连续多个数据
s4
= pd
.Series
({'name':'张','age':18,'gender':'人妖','school':'哈佛'})
print(s4
)
print('$$$$$$$$获取的是性别和姓名$$$$$$$$$')
print(s4
[1:2])
结果:
gender 人妖
dtype
: object
print(s4
['gender':'name'])
结果:
gender 人妖
name 张
dtype
: object
2.获取不连续的多个数据
print('$$$$$$$$$$$$$$$$$$$$$$$$$$$')
print(s4
[['age','name']])
print(s4
[[0,2]])
条件选择(与&或|非~)
ser1
= pd
.Series
(range(5),index
=range(1,6))
print(ser1
)
print('#################')
print(ser1
[(ser1
<=1) | (ser1
>3)])
注意点:
1、多个条件的成立
& | ~
2、语法结构s1
[条件
]
2、pandas的数据结构 --dataframe(数据表)
创建dataframe对象
通过数组创建dataframe对象
arr1
= np
.arange
(15).reshape
((3,5))
df1
= pd
.DataFrame
(arr1
,index
=['A','B','C'],columns
=list('abcde'))
print(df1
)
通过列表创建对象
new_list
= [[1,2,3],[4,5,6]]
df2
= pd
.DataFrame
(new_list
)
print(df2
)
通过字典创建对象
new_dict
= {
'subject':['python','java','php'],
'name':['张一毛','小张','张二毛'],
'hobby':['抽烟','蹦迪','喝酒'],
'time':pd
.Timestamp
('20200610')
}
df3
= pd
.DataFrame
(new_dict
)
print(df3
)
注意点:
1、字典的键名对应的就是dataframe对象的列名
2、如果是单个数据,自动填充到最多的个数,如果是多个数据,多个数据的个数应该是相同的
3、如果是最普通的字典,键值结构,注意需要指定index
new
= {'name':'jk','age':18,'gender':'male'}
df4
=pd
.DataFrame
(new
,index
=[0])
print(df4
)
指定行索引和列索引
arr1
= np
.arange
(15).reshape
((3,5))
df1
= pd
.DataFrame
(arr1
,index
=['A','B','C'],columns
=list('abcde'))
print(df1
)
注意点:
index行索引,columns列索引
直接增加一列数据
print('*******************************')
df3
['school'] = '加里敦'
print(df3
)
注意点:
1、语法 df名
['列索引'] = 值
取出单独的一列
print('######################')
print(df1
['e'])
print(df1
['e'].values
)
注意点:
1、语法df
[列索引名
]
2、返回的数据是一个series对象
3、获取具体的数值的语法df
[列名
].values ,数据的类型是数组
取出连续的多列
print(df1
['a':'c'])
结果:
Empty DataFrame
Columns
: [a
, b
, c
, d
, e
]
Index
: []
注意点:
1、df不支持通过列索引取连续多列这种语法结构,可以通过高级索引
取出不连续多列
print(df1
[['a','b','c','e']])
注意点:
1、df
[[索引
1,索引
2,。。。。。
]]
取出单独的一行
print('取出单独一行')
print(df1
['A':'A'])
取出连续多行
print('取出连读多行')
print(df1
['A':'B'])
取出不连续多行
print('不支持取出不连续多行的')
pandas提供的高级索引
loc 标签索引
对象
.loc
[行
,列
]
连续的多行、多列,起始位置
:结束位置(包括结束位置的)
不连续的多行或者多列
[标签
1,标签
2,。。。
]
iloc
对象
.iloc
[行
,列
]
连续的多行、多列,起始位置
:结束位置(不包括结束位置的)
不连续的多行或者多列
[标签
1,标签
2,。。。
]
增加数据、改变数据、查询数据
df1
.loc
['d',:]=[1,2,3,4]
df1
.loc
[:,'E']=[1,2,3,4]
df1
.iloc
[:
3]
删除数据
del
语法:
del 变量名
注意修改的是原始数据。
drop
print(df1
.drop
(['D', 'E'], axis
=1))
print(df1
.drop
(['d'], axis
=0))