数据分析02 /pandas基础
1. pandas简介
-
numpy能够帮助我们处理的是数值型的数据,当然在数据分析中除了数值型的数据还有好多其他类型的数据(字符串,时间序列),那么pandas就可以帮我们很好的处理除了数值型的其他数据!
-
pandas中的两个常用的类:Series/DataFrame
2. Series
-
定义:
Series是一种类似一维数组的对象,由下面两个部分组成:
values:一组数据(ndarray类型)
index:相关的数据索引标签
-
Series的创建
1.由列表或numpy数组创建
2.由字典创建
代码示例:
import pandas as pd from pandas import Series,DataFrame import numpy as np # 方式一: s1 = Series(data=[1,2,3,4,5]) # 方式二: s2 = Series(data=np.random.randint(0,100,size=(4,))) # 方式三: dic = { 'a':1, 'b':2, 'c':3 } # Series的索引可以为字符串 s3 = Series(data=dic) # Series这个数据结构中存储的数据一定得是一个维度
-
Series的索引
1.隐式索引:数值型,默认是隐式索引
2.显式所用:自定义(字符串),提高数据的可读性
代码示例:
# index指定显式索引 s4 = Series(data=[1,2,3],index=['数学','英语','理综'])
-
Series的索引和切片
1.索引操作
# 隐式索引操作 s4[0] # 显示索引操作 s4['数学'] s4.数学
2.切片
s4[0:2]
-
Series的常用属性
- shape:形状; 例:s4.shape
- size:大小; 例:s4.size
- index:行索引; 例:s4.index
- values:列索引; 例:s4.values
-
Series的常用方法
1.head(),tail()
s4.head(2) # 显式前n条数据 s4.tail(2) # 显式后n条数据
2.unique()
s = Series(data=[1,1,2,2,3,4,5,6,6,6,6,6,6,7,8]) s.unique() # 对Series进行去重
3.add() sub() mul() div() /Series的算术运算
s + s 相当于 s.add(s)
算数运算的法则:索引与之匹配的值进行算数运算,否则补空
s1 = Series(data=[1,2,3,4]) s2 = Series(data=[5,6,7]) s1 + s2 # 结果: 0 6.0 1 8.0 2 10.0 3 NaN dtype: float64
4.isnull(),notnull()/应用:清洗Series中的空值
s1 = Series(data=[1,2,3,4],index=['a','b','c','e']) s2 = Series(data=[1,2,3,4],index=['a','d','c','f']) s = s1 + s2 s # 结果: a 2.0 b NaN c 6.0 d NaN e NaN f NaN dtype: float64 # 清洗结果的空值:boolean可以作为索引取值 s[s.notnull()]
3. DataFrame
-
DataFrame简介
DataFrame是一个【表格型】的数据结构。DataFrame由按一定顺序排列的多列数据组成。设计初衷是将Series的使用场景从一维拓展到多维。DataFrame既有行索引,也有列索引。
- 行索引:index
- 列索引:columns
- 值:values
-
DataFrame的创建
1.ndarray创建
2.字典创建
示例:
df = DataFrame(data=np.random.randint(0,100,size=(5,6))) df dic = { 'name':['zhangsan','lisi','wangwu'], 'salary':[10000,15000,10000] } df = DataFrame(data=dic,index=['a','b','c']) df
-
DataFrame的属性
- df.values:所有的值
- df.shape:形状
- df.index:行索引
- df.columns:列索引
-
DataFrame索引操作
1.对列进行索引
# 索引取单列 df['name'] # 索引取多列 df[['age','name']]
2.对行进行索引
# 索引取单行 df.loc['a'] # 显示索引操作 df.iloc[0] # 隐式索引操作 # 索引取多行 df.loc[['a','c']] # 显示索引操作 df.iloc[[0,2]] # 隐式索引操作
3.取单个元素
df.loc['b','salary'] # 显示索引操作 df.iloc[1,1] # 隐式索引操作
4.取多个元素值
df.loc[['b','c'],'salary'] # 显示索引操作 df.iloc[[1,2],1] # 隐式索引操作
-
DataFrame的切片操作
1.对行进行切片
# 切行 df[0:2]
2.对列进行切片
# 切列 df.iloc[:,0:2]
-
DataFrame的运算:和Series是一样
元素对应的行列索引保持一致,则元素间可以进行算数运算,否则补空
-
查看df的数据的数据类型
df.dtypes df.info():信息更全
-
时间数据类型的转换:pd.to_datetime(col)
示例:
dic = { 'time':['2019-01-09','2011-11-11','2018-09-22'], 'salary':[1111,2222,3333] } df = DataFrame(data=dic) # 将time列转换成时间序列类型 df['time'] = pd.to_datetime(df['time']) # 转换前time的类型是:object # 转换后time的类型是:datetime64[ns] # 转换后可以进行datetime64[ns]类型相关的操作
-
将某一列设置为行索引:df.set_index()
示例:
# 将time这一列作为原数据的行索引 df.set_index(df['time'],inplace=True) # inplace将新表替换原表 # 将之前的time列删掉 df.drop(labels='time',axis=1,inplace=True) # drop函数中axis的0行,1列
4. 总结:
- 将查出来的数据写入文件中:df.to_csv('文件路径')
- 将文件中的数据查出来/pd调用:data = pd.read_csv('文件路径'); 显示前5行:data.head()
- 将时间转换成时间序列化/pd调用:df['date'] = pd.to_datetime(df['date'])
- 使用drop时axis=1代表的是列:df.drop(labels='Unnamed: 0',axis=1,inplace=True),inplace是判断是否用新表替换原表
- data.resample('M'):年:A | 月:M |日:D
- df.info():查看数据的详细信息
- df.describe():返回数据统计的描述