一.导包

import pandas as pd

二.Pandas的基本数据结构

1.Series

带索引的一维数组,和Numpy的一维数组类似,Series要求所有类型相同

一维Series可以用一维列表初始化,默认情况下,Series的下标是数字,类型是统一的

DataFrame是Series的容器

2.DataFrame

DataFrame是既有行索引,又有列索引的二维数组,DataFrame是Series的容器,DataFrame要求每一列数据的格式相同

df = pd.DateFrame(数据, index=, columns=)  # index是行索引,columns是列索引,索引值从0开始
import numpy as np
import pandas as pd

stock_change = np.random.normal(0, 1, (5, 4))
pd.DataFrame(stock_change)
stock = ["股票{}".format(i) for i in range(5)]
date = pd.date_range(start="20180101", periods=4, freq="B")
df = pd.DataFrame(stock_change, index=stock, columns=date)
print(df)

三.DataFrame的属性

1.查看类型

df.shape

2.查看行索引列表

df.index

3.查看列索引列表

df.columns

4.查看数据值

df.values

5.T

6.查看最前面几行的数据(默认是5)

df.head()

7.查看最后几行的数据(默认是5)

df.tail(num)

四.DataFrame索引的设置

1.修改行列索引值

df.index=

不能修改单个的索引值

df.index[3]="test"  # 错误的

2.重设索引

data.reset_index(drop=False)

drop:默认为False,不删除原来索引,如果为True,删除原来的索引值

3.以某列值设置为新的索引

set_index(keys, drop=True)

keys: 列索引名或者列索引名称的列表

drop: 默认是True,当做新的索引,删除原来的列

五.DataFrame的数据操作

1.直接使用行列索引(先列后行)

df['列索引名', '行索引名']

2.按名字索引

df.loc['行索引名', '列索引名']

3.按数字索引

df.iloc()
df.iloc[开始索引, 结束索引]  # 是左闭右开的区间[,),不包括结束索引的数据

4.赋值操作

data["列名"] = 值

data.列名 = 值

data.iloc[start, end] = 值  # [start,end)

六.DataFrame的运算

1.逻辑运算

data["p_change"] > 2 # 返回一组带索引的布尔值
data[(data["p_change"] > 2) && (data["open"] > 15)] # 筛选 p_change > 2 并且 open > 15 的数据
data.query(条件) 

七.Series的创建

series结构只有行索引

1.通过已有数据创建

(1) 指定内容,默认索引

pd.Series(np.arange(10))

(2) 指定索引

pd.Series([6,7,4,5,1], index=[1,2,3,4,5])

2.通过字典数据创建

pd.Series({'red':100, 'blue':200})

八.排序

1.对内容排序

(1) DataFrame

df.sort_values(key=, ascending=) # 默认升序

降序:ascending = False
升序:ascending = True

单个键:by = “”
多个键:by = [“”, “”]

(2) Series

series.sort_values(ascending=) # series排序时,只有一列,不需要参数

2.对索引排序

(1) DataFrame

df.sort_index()

(2) Series

series.sort_index()

九.文件的读取和存储

1.CSV

(1) 读取数据

pd.read_csv("路径")

(2) 存储数据

dataFrame.to_csv("路径", columns=["列名"])

2.JSON

pd.read_json("路径")

十.处理缺失值

1.缺失值是np.nan

(1) 判断数据中是否有缺失值

pd.isnull(df) # 返回一个布尔值对象

pd.notnull(df)

(2) 删除有缺失值的数据 或者 替换/填充缺失值

df.dropna(inplace=False)  # 删除含有缺失值的数据
df.fillna(value, inplace=False) # 替换/填充

inplace = True:覆盖之前的数据
axis = 0:选择行或者列
how = “all”:删除全为空值的行或者列

2.缺失值不是np.nan

(1) 把缺失值替换成np.nan

df.replace(to_replace="?", value=np.nan)

十一.数据离散化

1.对数据进行分组

(1) 自动分组

sr = pd.qcut(data, bins)

(2) 自定义分组

sr = pd.cut(data, bins)

2.统计每组的个数

series.value_counts()

3.将分组好的结果转换成one-hot编码

pd.get_dummies(sr, prefix="分组名字")

十二.合并

1.按行或列合并

pd.concat((data1,data2), axis=)

axis=0:列
axis=1:行

2.按索引合并

pd.merge(left, right, how="inner", on=[索引])

坚持