pandas

pandas

导入pandas:

# 数据分析有三剑客,三个模块

import numpy as np

import pandas as pd
from pandas import Series,DataFrame

# 前两个属于数据分析,展示数据,画图,一图顶千言
import matplotlib.pyplot as plt
# 如果大家用的自己的ubuntu或者用的windows系统尽心数据分心,使用plt.imshow(显示图片,图片没有出来)
# 添加魔法指令
%matplotlib inline #将这个模块加载到当前代码中

Series

Series是一种类似与一维数组的对象,由两个部分组成:

  • values:一组数据(ndarray)
  • index:相关的数据索引标签

Series的创建

两种创建方式:

  • 由列表或numpy数组创建
# numpy数组创建
nd = np.random.randint(0,150,size=10)
s = Series(nd)
# 列表创建
l = list('qwertyuio')
s = Series(l)
# 通过设置index参数指定索引
l = [1,2,3,4,5]
#s = Series(l,index=list('abcde'))
s = Series(l,index=['a','b','c','d','e'])
# name参数
s1 = Series(np.random.randint(0,150,size=8),index=list('abcdefg'),name='python')
  • 由字典创建
s = Series({'a':1,'b':2,'c':3})

Series的索引和切片

  • 显示索引
s1 = Series(np.random.randint(0,150,size=8),index=list('abcdefgh'),name='python') 
# 取出s1的一个值
s1['a']
# 取出两个以及以上的值,那么索引必须是一个list
s1[['a','b']]
# 用.loc[]
s1.loc[['a','b']]
  • 隐式索引
s1 = Series(np.random.randint(0,150,size=8),index=list('abcdefgh'),name='python') 
# 取一个值
s1[0]
# 取两个或以上的值
s1[[0,1]]
# 使用.iloc[]
s1.iloc[0]

s1.iloc[[0,1]]
  • 显示切片
    显示索引是闭区间,显示索引,即使超出了范围也不会报错,会显示最大的索引
s1 = Series(np.random.randint(0,150,size=8),index=list('abcdefgh'),name='python') 
s1['a':'b']
  • 隐式切片
s1 = Series(np.random.randint(0,150,size=8),index=list('abcdefgh'),name='python') 
s1[0:2]

Series的基本概念

可以把Series看成一个定长的有序字典,可以通过shape,size,index,values等得到series的属性

s1 = Series(np.random.randint(0,150,size=8),index=list('abcdefgh'),name='python') 
s1.shape
s1.size
s1.index
s1.values
s1.ndim

可以通过head(),tail()快速查看Series对象的样式

共同都有一个参数n,默认值为5

s1 = Series(np.random.randint(0,150,size=8),index=list('abcdefgh'),name='python') 
# 查看前面5个的样式
s1.head()
# 查看前面10个的样式
s1.head(n=10)
# 查看最后5个的样式
s1.tail()

使用pandas读取CSV文件

import pandas as pd
# 读取文件,使用的是pandas,不是使用数据类型
h = pd.read_csv('./AAPL.csv')

当索引没有对应的值时,可能出现缺失数据显示NaN(not a number)的情况

s6 = Series({'a':1,'b':2,'c':np.e,'d':None,'e':np.nan})
s6
# mysql->int->float->object(string)->Null
# msyql中Null的运行效率最低,我们在开发中,对于一些你重要的字段给一个default=0,用户可以不输入 一些值
# Null在统计,分组(where/having)查询的时候效率非常的低
# select name,age from user where id = 1
# select name,age from user hanving id = 1  会报错,having查询的必须是nmae或者age
# null NAN
# NaN在数据计算的时候效率也非常的低下,但是NaN不可避免,因为数据在导入的时候可能加载不完全
# 但是NaN不影响计算

Series的运算

适用于numpy的数组运算也适用于Serie

s1 = Series(np.random.randint(0,150,size=8),index=list('abcdefgh'),name='python')  
c = s1 < 98
s1[c]

Series之间的运算

  • 在运算中自动对齐不同索引的数据
  • 如果索引不对应,则补NaN
  • 注意:要想保留所有的index,则需要使用.add()函数
s1 = Series(np.random.randint(0,100,size=8),index=list('qwertyui'))
s2 = Series(np.random.randint(0,100,size=8),index=list('ertyuiop'))
# 两个Series相加
s1 + s2
# 第二种方式
# 我们不需要NaN,所以我们一般都会使用fill_value=0
s1.add(s2,fill_value=0)

DataFrame的创建

最常用的方法是传递一个字典来创建。DataFrame以字典的键作为每一【列】的名称,以字典的值(一个数组)作为每一列。此外,DataFrame会自动加上每一行的索引(和Series一样)。同Series一样,若传入的列与字典的键不匹配,则相应的值为NaN。

# 这是比较现实的数据格式
df = DataFrame({'数学':['100','90','80','70','60'],
          '语文':['101','91','81','71','61'],
          'python':['102','92','82','72','62']},
          index=list('abcde'),
          columns = ['数学','语文','python'])
df
df1 = DataFrame(np.random.randint(0,150,size=(5,3)),
               index = list('abcde'),
               columns=['数学','语文','python'])
df1

DataFrame属性:values、columns、index、shape、ndim、dtypes

df1 = DataFrame(np.random.randint(0,150,size=(5,3)),
               index = list('abcde'),
               columns=['数学','语文','python'])
# 取得值,返回的是ndarray
df1.values
# 取得行
df1.columns
df.index
# 取得形状
df.shape
# 取得它是几维的
df.ndim

DataFrame的索引

(1) 对列进行索引

  • 通过类似字典的方式
  • 通过属性的方式
    可以将DataFrame的列获取为一个Series。返回的Series拥有原DataFrame相同的索引,且name属性也已经设置好了,就是相应的列名。
df = DataFrame({'数学':['100','90','80','70','60'],
          '语文':['101','91','81','71','61'],
          'python':['102','92','82','72','62']},
          index=['雷军','罗胖子','jackMa','华腾','强东'],
          columns = ['数学','语文','python','java'])
# 取得一个列,返回的Series
df['python']
# 取得两个列
df[['python','java']]
# 取得单个值
df['python']['雷军']
# 通过属性的方法
df.python

(2) 对行进行索引

- 使用.loc[]加index来进行行索引
- 使用.iloc[]加整数来进行行索引

同样返回一个Series,index为原来的columns。

df = DataFrame({'数学':['100','90','80','70','60'],
          '语文':['101','91','81','71','61'],
          'python':['102','92','82','72','62']},
          index=['雷军','罗胖子','jackMa','华腾','强东'],
          columns = ['数学','语文','python','java'])
# 取得一行的数据,返回的series
df.loc['雷军']

df.loc[['雷军','华腾'],['python','数学']]

(3) 对元素索引的方法

- 使用列索引
- 使用行索引(iloc[3,1]相当于两个参数;iloc[[3,3]] 里面的[3,3]看做一个参数)
- 使用values属性(二维numpy数组)
df = DataFrame({'数学':['100','90','80','70','60'],
          '语文':['101','91','81','71','61'],
          'python':['102','92','82','72','62']},
          index=['雷军','罗胖子','jackMa','华腾','强东'],
          columns = ['数学','语文','python','java'])
df.iloc[0,0]
# 这种方式用得比较多,因为比较清晰
df.iloc[0][1]
df.iloc[0:3,0:2]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值