2021-03-19 Pandas

Pandas

pandas v.s.numpy

numpy处理数值,pandas可对其它类型的数据进行处理

pandas常用数据类型

  • Series
  • DataFrame

Series

Series对象本质由两个数组构成,键+值;ndarray的很多方法都可以用于series类型
P.S. 注意where方法稍有不同,不符合条件的不变或者赋值为nan

# key
print(t1.index)
print(type(t1.index))
# value
print(t1.values)
print(type(t1.values))
Index(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'], dtype='object')
<class 'pandas.core.indexes.base.Index'>
[0 1 2 3 4 5 6 7 8 9]
<class 'numpy.ndarray'>

Series创建

import pandas as pd
import numpy as np
import string
# create via range
t1 = pd.Series(np.arange(10),index=list(string.ascii_uppercase[:10]))
# create via dictionary
a = {string.ascii_uppercase[i]:i for i in range(10)}
t2 = pd.Series(a)
# if index is changes, new indexes points to nan
t3 = pd.Series(a,index=list(string.ascii_uppercase[5:15]))

切片和索引

# start,end and step
t1[2:10:2]
# single
t1[2]
t1[[2,5,7]]
# condition
t1[t1>4]
# via index
### P.S. query with any missing index is no longer supported
t1["F"]
t1[["A","F","G"]]

DataFrame

创建DataFrame

DataFrame对象既有行索引(index,axis=0),又有列索引(columns,axis=1)
同样可以由字典创建

t = pd.DataFrame(np.arange(12).reshape(3,4),                 index=list(string.ascii_uppercase[:3]),                 columns=list(string.ascii_uppercase[-4:]))

DataFrame属性

  • df.shape
  • df.dtypes
  • df.ndim # 数据维度
  • df.index
  • df.columns
  • df.values # 对象值,二维ndarray数组

DataFrame查询

  • df.head(3) # 显示头部几行 default 5
  • df.tail(3) # 显示末尾几行 default 5
  • df.info() # 相关信息:行数、列数、列索引、列非空值个数、列类型、内存占用
  • df.describe() # 快速综合统计结果:计数、均值、标准差、最大值、四分位数、最小值
  • df.sort_values(by=" ",ascending=False) # 排序

索引

  • 切片

    # 行和列的索引,可分开索引
    t[:2]["X"]
    
  • loc & iloc
    df.loc:通过标签索引行数据;df.iloc:通过位置获取行数据

    t.loc[["A","C"],["W","Z"]]
    t.iloc[[0,2],[1,3]
    
  • 布尔索引(P.S. 不同条件要用括号括起来)

    df[(df["Row_labels"].str.len()>4)
       &(df["Count_AnimalName"]>700)]
    

字符串方法

在这里插入图片描述

缺失数据的处理

两种情况:nan or 0

  • nan
    判断数据是否为nan:pd.isnull(df),pd.notnull(df)
    两种方法:
    1. 删除→t.dropna(axis=0,how=‘any’,inplace=‘False’)
      how:any表示只要有任何一个为nan删除,all表示全部为空值才删除
      inplace:如果为true,则原数据会被改变
    2. 填充数据→t.fillna(t.mean()) or t.fillna(0)
  • 0
    计算平均值等情况,nan不会参与运算,而0会,所以在某些情况下需要对0值进行处理
    t[t==0]=nan
    P.S. DataFrame会自动进行数据类型转换,因此赋值空值的时候不需要进行类型转换

读取外部数据

pd.read_csv()
pd.read_sql

合并数据

join

在这里插入图片描述

merge

按照指定的列把数据按照一定的方式合并到一起(替代:SQL处理完成后再导入)

在这里插入图片描述在这里插入图片描述

分组 & 聚合

  • df.groupby(by=[‘column_name’,'column_name]):返回一个DataFrameGroupBy对象,可迭代,其中每一个元素是一个组,元组里面是(索引,分组之后的DataFrame)
  • DataFrameGroupBy中的方法
    在这里插入图片描述

索引 & 复合索引

简单的索引操作

  • df.index:获取索引
  • df.index=[‘x’,‘y’]:重命名索引
  • df.reindex(‘a’,‘f’):本质为取行,本身没有的index会是空值
  • df.set_index(‘Contry’,drop=‘False’):将其中一列作为索引(成为索引后如果成为false,原列也不删除);可设置多个索引:df.set_index([‘a’,‘b’])
  • df.set_index('Country).index.unique()

Series复合索引

  • Series复合索引,直接在括号中写索引
    Example: X[‘one’,‘g’]
  • swaplevel():从内层开始取值

DataFrame复合索引

Example: X.loc[‘one’].loc[‘g’]
X.swaplevel().loc[‘g’]

时间序列

DatetimeIndex

  • 生成一段时间范围
    pd.date_range(start=None, end=None, periods=None, freq=‘D’)
    start end freq:生成start和end范围内以频率freq的一组时间索引
    start periods freq:生成从start开始的频率为freq的periods个时间索引
    在这里插入图片描述
  • 时间字符串转为时间序列
    pd.to_datetime(series,format="")
  • 重采样
    将时间序列从一个频率转换为另一个频率
    Example:t.resample(“M”).mean(), t.resample(“10D”).count()

PeriodIndex

  • 生成一段时间范围 periods=pd.PeriodIndex(year=data[“year”],month=data[“month”],day=data[“day”],hour=data[“hour”],freq=“H”)
  • 降采样 data=df.set_index(periods).resample(“10D”).mean()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值