pandas 学习笔记

pandas

为什么要学习pandas

numpy能够帮我们处理数值,但是pandas除了处理数值之外(基于numpy),还能够帮助我们处理其他类型的数据(比如字符串、时间序列、图片等)。

pandas的常用数据类型

  1. Series 一维,带标签数组
  2. DataFrame 二维,Series容器

pandas之Series创建

  1. 通过列表

    t  = pd.Series(np.arange(10),index=list(string.ascii_uppercase[:10]))
    print(t)
    print(type(t))
    
    

    在这里插入图片描述

  2. 通过字典创建:

    temp_dict = {“name:"xiaohong","age":30,"tel":10086}
    
    t3 = pd.Series(temp_dict)
    
    print(t3)
    print(type(t3))
    

pandas之Series切片和索引

切片:直接传入start end 或者步长即可

索引:一个的时候可以传入序号或index,多个的时候传入序号或者index的列表。

pandas之Series的索引和值

Series对象本质上由两个数组构成。一个数组构成对象的键(index,索引),一个数组构成对象的值(values),键→值

对于一个陌生的series类型,如何知道他的索引和具体的值?

t.index #得到索引
t.values #得到值

遇到不懂的方法时去看文档

pandas 之读取外部数据

pd.read_csv() # 读取csv文件

pd.read_sql(sql_sentence,connection) #读取数据库中数据

import pandas as pd
df = pd.read_csv("路径")

读取MongoDB呢?

先安装环境:pip install pymongo

from pymongo import MongoClient
import pandas as pd

client = MongoClient()
collection = client["douban"]["tv1"]
data = list(collection.find())

t1 = data[0]
t1 = pd.Series(t1)
print(t1)

pandas 之 DataFrame(二维数据)

t = pd.DataFrame(np.arange(12).reshape(3,4))

在这里插入图片描述

DataFrame对象既有行索引,又有列索引

行索引,表明不同行,横向索引,叫index,0轴,axis=0

列索引,表明不用列,纵向索引,叫columns,1轴,axis=1

指定行索引和列索引
t = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("wxyz"))

在这里插入图片描述

  1. DataFrame和Series有什么关系?
    DataFrame是Series的容器。

  2. Series能传入字典,那么DataFrame能够传入字典作为数据吗?

    d1 = {"name":["xiaoming","xiaohong"],"age":[20,22],"tel":[10086,10010]}
    pd.DataFrame(d1)
    t1 = pd.DataFrame(d1)
    type(t1)
    

    在这里插入图片描述

    d2 = [{"name":"xiaohong","age":22,"tel":10010},{"name":"xiaoming","age":20,"tel":10086}]
    
    print(d2)
    
    t2 = pd.DataFrame(d2)
    
    print(t2)
    

    在这里插入图片描述

DataFrame 的基础属性

df.shape #(行数 ,列数)

df.dtypes #列数据类型

df.ndim #数据维度

df.index #行索引

df.columns #列索引

df.values #对象值,二维ndarray数组

DataFrame整体情况查询

df.head(3) #显示头部几行,默认五行

df.tail(3) #显示末尾几行,默认五行

df.info() #相关信息概览:行数,列数,列索引,列非空值个数,行类型,列类型,内存占用

df.describe() #快速综合统计结果(数字类型):计数,均值,标准差,最大值,最小值,四份位数(25%,50%,75%)

DataFrame中排序的方法

按count_AnimalName从小到大排:
df = df.sort_values(by="count_AnimalName")

pandas取行或取列

注意点:

  • 方括号中写数组,表示取行,对行进行操作
  • 写字符串表示取列的索引,对列进行操作

pandas之loc

df.loc 通过标签索引数据 标签:字符串

df.iloc 通过位置获取数据 位置:123

t = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("wxyz"))

t.loc["a","z"]

type(t.loc["a","z"])

t.loc["a"]

t.loc["a",:]

t.loc[:,"y"]

t.loc[["a","c"],:]

t.loc[:,["w","z"]]

t.loc[["a","c"],["w","z"]]

t.iloc[1]

t.iloc[:,1]

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

赋值更改数据,可直接更改:t[1,1] = 0

pandas之布尔索引

不同条件之间需要用括号括起来

df[(800<df["xx"])&(df["xx"] <1000)]

  • & 且
  • |或

pandas之字符串方法

在这里插入图片描述

缺失数据处理

对于NaN数据处理

判断数据是否为Nan:pd.isnull(df),pd.notnull(df)

  • 处理方式1:删除NaN所在行列dropna(axis=0,how='any',inplace=False)

    • how :默认any,只要有就删除,all:当前行(列)全为NaN才删除
    • inplace:是否原地修改
  • 处理方式2:填充数据,t.fillna(t,mean()),t.fiallna(t,median()),t.fillna(0)

处理为0的数据:t[t==0] = np.nan

计算平均值等情况,nan是不参与计算的,但是0会。

posted @ 2020-02-20 23:29  19呀  阅读(295)  评论(0编辑  收藏  举报