python高级--数据分析(Pandas库)

) map()函数:映射元素Pandas 库
数据分析三剑客:NumPy Pandas Matplotlib

一、Series

Series是一种类似于一维数组的对象由两部分组成
· index:相关的所居索引标签
· values:一组数据(ndarray类型)

1、创建

Series(data=None,index=None,dtype=None, name=None, copy=False, fastpath=False)

data:一组数据
index:索引(默认为 0,1,2,…)
name:这个对象的名字
注意:传入的索引要和数据对应,多传或少传会报错

1)简单直接创建

#直接传入一个列表即可创建,索引默认
>>> Series([1,2,3,4])
0    1
1    2
2    3
3    4
dtype: int64
#传入数据和索引
>>> Series(data=[1,2,3,4],index=['A','B','C','D'])
A    1
B    2
C    3
D    4
dtype: int64
#一般这样传入比较简单
>>> Series(data=[1,2,3,4],index=list('ABCD'))

2)字典形式创建

一般不这样创建,比较麻烦

>>> Series({
  'A':1,"B":2,"C":3,"D":4})
A    1
B    2
C    3
D    4
dtype: int64

2、索引和切片

单个元素的索引与列表索引类似,返回单个索引类型
取多个索引,返回的是一个series类型
1)字符索引取值:
· 使用index中的元素作为索引值
· 使用 .loc[ ] 取值(推荐)
· 注意:字符索引是闭区间 [ start, end ]
2)数字索引取值:
· 使用整数作为索引值
· 使用 .iloc[ ] 取值(推荐)
· 注意:字符索引是左闭右开区间 [ start, end )

>>> s = Series(data=[1,2,3,4],index=list('ABCD'))
>>> s
A    1
B    2
C    3
D    4
dtype: int64
############   索引   ######################
>>> s[0]          #基础索引
1
>>> s.loc["A"]    #字符索引
1
>>> s.iloc[0]     #数字索引
1
#############   切片   ###################
>>> s[0:2]     #基础切片(基础切片不能单个截取)
A    1
B    2
dtype: int64

>>> s.loc["A","C"] # 注意 !!! 这样指要获取最外层的 A 里面的 C 要
想获取 s 里的 A 和 C 这样

>>> s.loc[["A","C"]]  #单个截取(字符索引)
A    1
C    3
dtype: int64
>>>> s.loc["A":"C"]  #区间截取(字符索引)
A    1
B    2
C    3
dtype: int64

>>>> s.iloc[[0,3]]  #单个截取(数字索引)
A    1
D    4
dtype: int64

>>> s.iloc[0:3]  #区间截取(数字索引)
A    1
B    2
C    3
dtype: int64

3、Series的属性和方法

属性

1)形状 shape
2)个数 size

方法

1)查看前面 head()

s.head(n=5)

2)查看后面 tail()

s.head(n=5)

'''
n:取几个,默认为5个
'''
>>> s
A    1
B    2
C    3
D    4
dtype: int64
>>> s.head(2)
A    1
B    2
dtype: int64
>>> s.tail(2)
C    3
D    4
dtype: int64
3)求和

s.sum(axis=None,skipna=None,level=None,numeric_only=None, min_count=0, **kwargs)

'''
对于Series中的求和会将None会被自动转化为NAN,而且在计算时会自动将NAN转化为0
多维数组中的None在求和时会报错
'''
# Series 求和
>>> s2 = Series([1,2,3,None,np.NAN])
>>> s2
0    1.0
1    2.0
2    3.0
3    NaN
4    NaN
dtype: float64
>>> s2.sum()
6.0

# ndarray 求和
>>> nd = np.array([1,2,3,None,np.NAN])
>>> nd
array([1, 2, 3, None, nan], dtype=object)
>>> np.sum()
报错~~
4)isnull()/ notnull()

isnull()
功能:检测None / NaN,为空返回Ture,不为空返回False

>>> s2
0    1.0
1    2.0
2    3.0
3    NaN
4    NaN
dtype: float64

>>> s2.isnull()
0    False
1    False
2    False
3     True
4     True
dtype: bool

notnull()
功能:检测None / NaN,为空返回False,不为空返回Ture

>>> s2
0    1.0
1    2.0
2    3.0
3    NaN
4    NaN
dtype: float64

>>> s2.notnull()
0     True
1     True
2     True
3    False
4    False
dtype: bool
5)name属性

功能:来区分两个相同的数组
注意:在创建的时候设置了才有name属性,如果没有设置,则返回为空

6)unique()去重
>>> s1 = Series(['tom','lili','hehe','tom','lili'])
>>> s1
0     tom
1    lili
2    hehe
3     tom
4    lili
dtype: object

>>> s1.unique()
array(['tom', 'lili', 'hehe'], dtype=object)

4、Series的运算

1)Series的加减乘除

广播机制:给Series对象进行运算

>>> s
A    1
B    2
C    3
D    4
dtype: int64
#注意返回之后不会改变原数据的值
>>> s+1
A    2
B    3
C    4
D    5
dtype: int64

2)Series的运算

s.add(other,fill_value=None, axis=0)

'''
other:另一个Series
fill_value:相加是不对称的地方的NAN以这个值来填充
'''

>>> s1 = Series(data=np.random.randint(1,5,size=5),index=list('abcde'))
>>> s1
a    1
b    1
c    3
d    1
e    2
dtype: int32
>>> s2 = Series(data=np.random.randint(1,5,size=3),index=list('abc'))
>>> s2
a    2
b    3
c    1
dtype: int32

>>> s1.add(s2)      #没有fill_value=0
a    3.0
b    4.0
c    4.0
d    NaN
e    NaN
dtype: float64

>>> s1.add(s2,fill_value=0) #有fill_value=0
a    3.0
b    4.0
c    4.0
d    1.0
e    2.0
dtype: float64

二、DataFrame

DataFrame是一个【表格型】的数据结构,可以看做是【由Series组成的字典】(多个series共用同一个索引)。DataFrame由按一定顺序排列的多列数据组成。设计初衷是将Series的使用场景从一维拓展到多维。DataFrame既有行索引,也有列索引。

行索引:index
列索引:columns
值:values(numpy的二维数组)

1、创建DataFrame

DataFrame(data=None, index=None,columns=None, dtype=None, copy=False)

1)一般创建方法

'''
data:数据
index:行索引(默认为 0,1,2....)
columns:列索引(默认为 0,1,2....)

注意:行索引和列索引要和所创建的数据维度对应!否则报错
'''
# 成绩表
nd = np.random.randint(0,150,size=(5,4))
nd = array([[125,  19,  45,  25],
           [ 62, 128, 139,   2],
           [ 99, 142, 134,  98],
           [  3, 114, 142, 102],
           [ 47, 110,  70, 112]])
index=['张三','李四','王老五','赵六','田七']
columns = ['python','java','c','math']
df = DataFrame(data=nd,index=index,columns=columns)
df

这里写图片描述

2)字典创建方法

话不多说,上图
这里写图片描述

3)通过导入csv文件创建

文件内容:
这里写图片描述

DataFrame创建:
pd.read_csv(“文件路径“)
这里写图片描述
文件导入后会默认添加行索引
疑问:csv文件导入到DataFrame后第一行是否一定是列索引?

2、DataFrame的属性

以上面创建的成绩表为 s 其中的数值不一样

1)values 值

返回值是一个多维数组

s.values
array([[100, 102,  50,  85],
       [ 69, 136,  71, 100],
       [129,  90,  18, 121],
       [149,  87, 143, 129],
       [ 40,  80, 129,  61]])

2)columns 列索引

s.index
Index(['张三', '李四', '王老五', '赵六', '田七'], dtype='object')

3)index 行索引

s.columns
Index(['python', 'java', 'c', 'math'], dtype='object')

4)shape 形状

行叫样本
列叫特征

s.shape
(5, 4)  # 5 个样本,4 个特征

5)query 查询

>>> df1 = DataFrame({
  'name':['tom','lucy','tom','peppy','lucy'],'age':[12,13,12,11,15]})
>>> df1
        name  age
    0    tom   12
    1   lucy   13
    2    tom   12
    3  peppy   11
    4   lucy   15
>>> df1.query('name=="lucy"')  #查询name是”lucy“的样本
       name  age
    1  lucy   13
    4  lucy   15
>>> df1.query('name=="lucy"&age>14')  #查询name是lucy同时age大于 14的样本
       name  age
    4  lucy   15

3-1、DataFrame的单层索引

以上面创建的成绩表为 s 其中的数值不一样
这里写图片描述

1)对列进行索引与切片
  • 通过类似字典的方式
  • 通过属性的方式
'''
返回值:一个Series对象
'''
s['python']   #通过字典的方式
张三     100
李四      69
王老五    129
赵六     149
田七      40
Name: python, dtype: int32

s.python    #通过属性的方式
张三     100
李四      69
王老五    129
赵六     149
田七      40
Name: python, dtype: int32
2)对行进行索引
  • 使用.loc[ ] 加index来进行行索引
  • 使用.iloc[ ] 加整数来进行行索引
'''
返回值:一个Series对象
'''
s.loc['张三']         #使用.loc[] 索引
python    100
java      102
c          50
math       85
Name: 张三, dtype: int32

s.iloc[1]    #使用.iloc[] 索引
python     69
java      136
c          71
math      100
Name: 李四, dtype: int32
3)对元素进行索引
  • 使用列索引,再进行元素索引
  • 使用行索引,再进行元素索引
  • 使用整数数组形式的索引
  • 取 任意顺序 的 任意元素
#使用列索引,再取元素值
s['python']
s['python'].loc['张三']
s['python'].iloc[0]
100
#使用行索引,再取元素值
s.loc['张三'<
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值