pandas 学习笔记
pandas
为什么要学习pandas
numpy能够帮我们处理数值,但是pandas除了处理数值之外(基于numpy),还能够帮助我们处理其他类型的数据(比如字符串、时间序列、图片等)。
pandas的常用数据类型
- Series 一维,带标签数组
- DataFrame 二维,Series容器
pandas之Series创建
-
通过列表
t = pd.Series(np.arange(10),index=list(string.ascii_uppercase[:10])) print(t) print(type(t))
-
通过字典创建:
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"))
-
DataFrame和Series有什么关系?
DataFrame是Series的容器。 -
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会。