数据分析_04_pandas

pandas

处理除了数值型的数据之外的其他类型数据

  • 常用数据类型

    • Series 一维数据,带标签的数组
    • DataFrame 二维数据
  • 创建Series数组

    pd.Series([1,23,2,2,1], index=list(“abcde”))

    也可以用字典转换到Series

  • 转变数值类型

    t2.astype(float)

切片和索引

  • 获取值

    可以是键,也可以是下标

    例如:t3[“age”], t3[2]

  • 取不连续的几行

    t[ [“age”,“tel”] ]

  • 布尔索引

    t[t>10]

  • 所有下标(键)

    xx.index

  • 所有值

    xx.values

读取外部数据

  • 读取csv

    df = pd.read_csv("./dogName2.csv")

    还可以读很多格式的文件

    比如html, json, sql…

对于没有对应功能的格式或者文件,例如Mnogodb,可以先存到pandas中,再用一系列(DataFrame)操作

DataFrame

二维,Series容器

在这里插入图片描述

  • 命名索引名称

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

    index=list(“abc”),

    columns=list(“WXYZ”))

在这里插入图片描述

  • 字典传入DataFrame

    • 列表里有多少数据表示DataFrane有多少行

在这里插入图片描述

  • 也可以用存字典的列表传入

在这里插入图片描述

基础属性

  • 行坐标

    t2.index

  • 列坐标

    t2.columns

  • 所有的值(存了一个个对象的数组)

    t2.values

  • 形状(几行几列)

    t2.shape

  • 每一列是什么类型

    t2.dtypes

  • 数据的维度

    t2.ndim

  • 显示头部几行

    df.head(3)

  • 显示尾部几行

    df.tail(3)

  • 一些信息,行数、列数、列索引、列类型…

    df.info()

  • 统计数字列的情况,平均值、方差…

    df.describe()

消除不想要的数据(列)

从大的数据中通过for循环获得一小部分列,存在另外一个列表中

  • 按某列的顺序排序

    df.srot_values(by=“Count_AnimalName”,

    ascending=False(降序))

  • 取行或者列

    df[:20]

    #前20行

    df[‘Row_Labels’]

    #取列索引

  • 通过标签索引行数据

    t3.loc[字符串或者字符串列表,字符串或者字符串列表]

    例如:t3.loc[‘A’,:]

    注意:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fGlNBFFP-1611656236484)(04_pandas.assets/image-20210123111351787.png)]

  • 通过位置索引行数据

    t3.iloc[[0,2,[2,1]]

  • 布尔索引

    df[ df[“count”] > 800

    t3[ pd.notnull( t3[‘W’] ) ]

在这里插入图片描述

字符串方法

contains

len

lower, upper

replace

split

例如:

df[‘info’].str.split(’/’).tolist()

#用/切割一行行数据,然后保存到一个大列表中

缺失数据处理

  • 判断数据是否为NaN

    pd.isnull(df)

    pd.notnull(df)

  • 处理方式

    1. 删除NaN所在的行列dropna(axis=0,how=‘any’,inplace=False)

    #0删除行,all表示当前行全部为NaN才删;any表示有1个为NaN就删,inplace表示原地替换将矩阵换成之后的结果

    1. 填充数据。t2.fillna(0)

      t2.fillna(t2.mean())

      #将平均值填充到所有列的NaN中来

      只填充一列

      t2[“age”] = t2[“age”].fillna(t2[“age”].mean())

在numpy中含有NaN的列的平均值为Nan

在pandas中含有NaN的列的平均值会忽略NaN

处理为0的数据(0是否没有意义):

t[t==0] = np.nan

  • 获得全部导演(名字的列表)的数量

    len(df[“Director”].unique())

  • 获得多个电影的演员人数:

    展平放在一个列表中,再利用集合set唯一化

在这里插入图片描述

  • 获得最大值、最小值、、和它们的位置

在这里插入图片描述

例子:统计电影类型

在这里插入图片描述

在这里插入图片描述

数据合并

  • join

    默认把行索引相同的数据合并到一起

  • merge

    按照指定的列把数据按照一定的方式合并到一起

    df1.merge(df3,on=“a”,how=“inner”)

    how:

    • inner 交集

    • outer 并集,NaN补全

    • left 左边为准,NaN补全

    • right 右边为准,NaN补全

在这里插入图片描述

分组和聚合

分组

df.groupby(by=“columns_name(Country)”)

返回DataFrameGroupBy对象

  • 可以进行遍历

    for i.j in grouped:

    ​ print(i,j)

    按“国家”分类,每一个都为元组,前面i是“国家”,后面j是DataFrame(当前数据全部为该“国家”的DataFrame)

    元组(索引(分组的值),分组之后的DataFrame)

  • 按照多个条件进行分组

    PPT134页描述详细

在这里插入图片描述

在这里插入图片描述

前面两列一起为索引(复合索引),后面为数据,类型为Series

要想返回DataFrame类型,只需要在加一个[]方括号,例如df[[“Brand”]]

PPT135页

索引的方法和属性

  • 获取index

    grouped1.index

  • 指定index

    df1.index = [“a”,“b”]

  • 重新设置index

    df.reindex(list(“abcdef”))

    #不存在的会设置为NaN,相当于对其取行

在这里插入图片描述

  • 指定某一列作为index

    df1.set_index(“a”,drop=False(False为保留a列))

在这里插入图片描述

  • 返回index的唯一值

    df.set_index(“Country”).index.unique()

  • 可以是复合索引

在这里插入图片描述

例子

在这里插入图片描述

  • 交换(前后两个)索引的位置

    d. swaplevel()

聚合

  • 统计全部国家的公司个数

    grouped[“Brand”].count()

    可以取特定列统计(例如Brand,也可以是Country,没有NaN)

在这里插入图片描述

时间序列

  • 生成一段时间范围

    pd.data_range(start=None,end=None,periods=None,freq=‘D’)

在这里插入图片描述

  • 常见的频率的缩写

在这里插入图片描述

10D:表示10天

  • 时间字符串转化为时间序列(字符串转类型对象)

    df[‘timeStamp’] = pd.to_datatime(df[‘timeStamp’],format="")

    #format可以帮助格式化时间字符串(可以查阅python datetime),比如包含中文

  • 重采样

    指的是将时间序列从一个频率转化为另一个频率进行处理的过程

    • 将高频率数据转化为低频率数据为降采样
    • 低频率转化为高频率为升采样

    pandas可以用resample方法实现频率转化

    • t.resample(“M”).mean()

      #按月份取平均值

    • t.resample(“10D”).count()

      #10天计数

  • 时间段

    periods = PeriodIndex(

    year=data[‘year’],

    month=data[‘month’],

    day=data[‘day’],

    hour=data[‘hour’],

    freq=‘H’)

    #功能:把分开的时间字符串通过periodIndex方法转化为pandas的时间类型

    之后可以添加1列到数据中

    指的是将时间序列从一个频率转化为另一个频率进行处理的过程

    • 将高频率数据转化为低频率数据为降采样
    • 低频率转化为高频率为升采样

    pandas可以用resample方法实现频率转化

    • t.resample(“M”).mean()

      #按月份取平均值

    • t.resample(“10D”).count()

      #10天计数

  • 时间段

    periods = PeriodIndex(

    year=data[‘year’],

    month=data[‘month’],

    day=data[‘day’],

    hour=data[‘hour’],

    freq=‘H’)

    #功能:把分开的时间字符串通过periodIndex方法转化为pandas的时间类型

    之后可以添加1列到数据中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值