导包三剑客
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
由ndarray创建的是引用,而不是副本。对Series元素的改变也会改变原来的ndarray对象中的元素。(列表没有这种情况)
1.Series
创建
(1)列表创建
Series(value,index)
nd = np.array([0,2,4,6])
s = Series(nd, index = [“A”,“B”,“C”,“D”])
(2)字典创建
s = Series(data = {“a”:10, “pi”:3.14,“e”:2.713,“g”:0.618 }, index = [“a”,“pi”,“e”,“g”,“kk”])
索引
(1)显示
使用index中的元素作为索引值,直接用中括号
s[“e”]
使用.loc[](推荐)
s.loc[“e”]
(2)隐式
使用整数作为索引值
使用.iloc[](推荐)注意,使用iloc进行切片的时候,都是左闭右开的
注意:一个中括号和两个中括号返回的数据是不一样的(重要的)
属性
data.shape
data.size
data.index
data.values
查看样式
pd.read_csv()
head()
tail()
检测空值
pd.isnull()
pd.notnull()
或
data.isnull()
data.notnull()
返回元素是boolean 类型的值 如果为空的话, 返回True 如果不为空的话, 返回False #注意事项:对于DataFrame而言, 每一列数据其实都是一个Series, 并且都是有name属性的
series运算
(1)适用于numpy的数组运算也适用于Series
(2)Series之间的运算:在运算中自动补齐不同索引的数据;如果索引不对应,则补NAN
2.DataFrame
三类数据:
#结构化数据:例如数据库的数据表, 有行有列
#半结构化数据:比如 xml, json
#非结构化数据:图片, 音频,视频等 二进制流的形式进行读取存储的
DataFrame是一个【表格型】的数据结构,可以看做是【由Series组成的字典】(共用同一个索引)。DataFrame由按一定顺序排列的多列数据组成。设计初衷是将Series的使用场景从一维拓展到多维。
DataFrame既有行索引,也有列索引。
- 行索引:index
- 列索引:columns
- 值:values(numpy的二维数组)
(1)创建dataframe
最常用的方法是传递一个字典来创建
DataFrame属性:values、columns、index、shape
(2)索引
a.列索引:
可以将DataFrame的列获取为一个Series。返回的Series拥有原DataFrame相同的索引,且name属性也已经设置好了,就是相应的列名。
方式一:类似字典;
方式二:通过属性的方式,取多个的时候采用两个中括号
b.行索引
- 使用.ix[]来进行行索引
- 使用.loc[]加index来进行行索引
- 使用.iloc[]加整数来进行行索引
同样返回一个Series,index为原来的columns。
c.对元素索引的方法 - 使用列索引
- 使用行索引(iloc[3,1]相当于两个参数;iloc[[3,3]] 里面的[3,3]看做一个参数)
- 使用values属性(二维numpy数组)
注意: 直接用中括号时:
索引表示的是列索引
切片表示的是行切片
(3)运算
a.dataframe运算
同Series一样:
在运算中自动对齐不同索引的数据
如果索引不对应,则补NaN;两个DataFrame进行相加的时候,axis是不起作用的
b.Series与DataFrame之间的运算
使用Python操作符:以行为单位操作(参数必须是行),对所有行都有效。(类似于numpy中二维数组与一维数组的运算,但可能出现NaN)
使用pandas操作函数:
axis=0:以列为单位操作(参数必须是列),对所有列都有效。
axis=1:以行为单位操作(参数必须是行),对所有行都有效。