一、DataFrame运算

1.算术运算

# 进行数学运算加上具体的一个数字
add(other)

# 减法
sub(other)

2.逻辑运算

  2.1 逻辑运算符号<、>、|、&

  2.2 逻辑运算函数

query(expr)
# expr:查询字符串

isin(values)
# 指定值进行判断从而进行筛选操作

由于stock_t中的内容是随机生成,会出现精度问题,推荐先四舍五入保留6位小数后进行isin判断

3.统计运算

# 综合统计函数
data.describe()

# 求总和 可以按行或按列
data.sum()

# 求中位数
data.median()

# 求出最大值的索引
data.idxman()

# 求出最小值的索引
data.idxmin()

4.累计统计函数

5.自定义运算

apply(func, axis=0)
# func是自定义函数
# axis=0默认是列,axis=1为行进行运算

#定义一个对列,最大值-最小值的函数
stock_t[['股票1', '股票2']].apply(lambda x: x.max() - x.min(), axis=0)
# lambda为匿名函数,意为返回值x是x.max()-x.min()的值

二、Pandas画图

1.pandas.DataFrame.plot

DataFrame.plot(x= , y= , kind='line')
# kind表示画什么类型的图
line  折线图
bar   条形图
barh  
hist  直方图
pie   饼图
scatter  散点图

2.pandas.Series.plot

三、文件读取与存储

1.csv

  1.1 read_csv 读取

通过网盘分享的文件:stock_day.csv
链接: https://pan.baidu.com/s/12TlwjEFIRS9eP9sUbSqJBw?pwd=b42n 提取码: b42n

pandas.read_csv(filepath_or_buffer, sep=',')
# filepath_or_buffer:文件路径
# sep=',':以','为分割
# usecols:指定读取的列名,列表形式

  1.2 to_csv 存储

DataFrame.to_csv(path_or_buf=None, sep=',', columns=None, header=True, index=True, mode='w', encoding=None)
# path_or_buf:保存路径
# sep:按什么分割
# columns:需要什么列
# mode:'w'重写,'a'追加
# index:是否写进行索引

2.HDF5

推荐使用,因为采用blosc压缩方式读取效率快,压缩后可以节省空间,支持跨平台

  2.1 read_hdf 读取文件

pandas.raed_hdf(path_or_buf, key=None, **kwargds)
# path_or_buf 文件路径
# key 读取的键

  2.2 to_hdf 写文件

pd.to_hdf(path_or_buf, key=None)
# 注意:保存的文件是h5后缀

3.json

  3.1 read_json

pandas.read_json(path_or_buf=None, orient=None, typ='frame', lines=False)
# orient 以什么方式进行读取或写入
    # split 将索引总结到索引,列名到列名,数据到数据,将三部分都分开
    # records 以colums:values的形式输出
    # index 以index:{columns:values}形式输出
    # columns 以columns:{index:values}形式输出
    # values 直接输出值
# lines 是否按行读取
# typ 指定转换成的对象类型series或者dataframe

  3.2 to_json

DataFrame.to_json(psth_or_buf=None, orient=None, lines=False)
# 将Pandas对象存储为json格式
# orient 存储的json形式,{'split','records','index','columns','values'}
# lines 一个对象存储为一行

四、缺失值处理

1.如何处理NaN

# 判断数据是否为NaN
pd.isnull(df)
pd.notnull(df)

# 处理方式
  ## 存在缺失值NaN,并且是np.nan
     ### 1.删除存在缺失值,不会修改元数据需要接收返回值
           dropna(axis='rows')
     ### 2.替换缺失值
           fillna(value,inplace=True)
           value 替换成的值
           inplace:True会修改原数据 False不替换修改元数据,生成新的对象
  ## 不是缺失值nan,有默认标记的
           replace(to_replace=None, value=np.nan)
           to_replace 替换前的值
           value 替换后的值

2.电影数据的缺失值处理

# 读取电影数据
movie = pd.read_csv("./data/IMDB-Movie-Data.csv")

  2.1 判断缺失值是否存在

  2.2 存在缺失值nan,并且是np.nan

  • pandas删除缺失值,使用dropna的前提是,缺失值的类型必须是np.nan

  • 替换缺失值

  • 替换所有缺失值

  2.3 不是缺失值nan,有默认标记的

# 引入一组数据
wis = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data")

五、数据离散化

1.什么是数据离散化

       把一些数据分到某个区间,最后用不同的符号或者数字表达

2.股票的涨跌幅离散化

# 把数据大致分为数量相等的几类 一般会与valuee_counts搭配使用,统计每组的个数
pd.qcut(data,bins)

# 指定分组间隔
pd.cut(data, bins)

# 统计分组次数
series.value_counts()

3.股票涨跌幅分组数据变成one-hot编码

  3.1 什么是one-hot编码(哑变量、热独编码)

        就是把数据转化成为0,1统计类型

    3.2 pd.get_dummies

pandas.get_dummies(data, prefix=None)
    data 统计好的数据
    prefix 分组名字

六、合并

1.pd.concat

pd.concat([data1, data2], axis=1)
# 按照行或列进行合并,axis=0为列索引,axis=1为行索引

2.pd.merge

pd.merge(left, right, how, on, left_on, right_on)
    left 左表
    right 右表
    how 以何种方式拼接
    on 连接的键
    left_on 是否指定左键
    right_on 是否指定右键

  • 内连接

  • 外连接

  • 左连接

  • 右连接

七、交叉表与透视表

1.crosstab(交叉表)

  • 交叉表用于计算一列数据对于另外一列数据的分组个数(寻找两个列之间的关系)
pd.crosstab(value1, value2)
# 返回具体数量
  • 利用交叉表得出一周内各天对应的涨跌数

  • 对于每个星期一等的总天数求和,运用除法运算求出比例

  • 绘制图表

2.pivot(透视表)

对象.pivot_table()
# 返回占比情况

八、分组与聚合

1.分组API

  • 准备数据

  • 进行分组,对颜色分组,price聚合

  • 分组,数据结构不变

2.星巴克零售店铺数据

  • 准备数据

  • 按照国家分组并画图

  • 可以加入省市一起进行分组

九、综合案例分析

1.问题1:如何获取电影数据中评分的平均分,导演的人数等信息

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

movie = pd.read_csv("./data/IMDB-Movie-Data.csv")
#1.求评分的平均值
mean = movie["Rating"].mean()
#2.求导演人数(去重)
movie["Director"].unique().shape[0]

2.问题2:如何获取Rating,Runtime(Minutes)的分布情况,应该如何呈现数据

plt.figure(figsize=(20, 8), dpi=100)

plt.hist(movie["Rating"].values, 20)
max_ = movie["Rating"].max()
min_ = movie["Rating"].min()
x1 = np.linspace(min_,max_,21)
plt.xticks(x1)

plt.show()

plt.figure(figsize=(20, 8), dpi=100)

plt.hist(movie["Runtime (Minutes)"].values, 20)
max_ = movie["Runtime (Minutes)"].max()
min_ = movie["Runtime (Minutes)"].min()
x1 = np.linspace(min_,max_,21)
plt.xticks(x1)

plt.show()

3.问题3:如何统计电影分类情况

temp_list = [i.split(",") for i in movie["Genre"]]
array_list = np.unique([i for j in temp_list for i in j])
array_list.shape[0]

genre_zero = pd.DataFrame(np.zeros([movie.shape[0], array_list.shape[0]]), columns=array_list)
for i in range(movie.shape[0]):
    genre_zero.loc[i, temp_list[i]] = 1

genre_zero.sum().sort_values(ascending=False).plot(kind="bar", figsize=(20,8), fontsize=18)

更多推荐