数据处理


参考 莫烦PYTHON

1. 数据numpy和pandas

1.1. numpy & Pandas简介

1.1.1. 为什么使用numpy和pandas

numpy和pandas基于C语言编写,pandas又基于numpy,且它们采用矩阵运算,所以它们比python自带的列表或字典快很多

1.1.2. 安装

使用清华的源
pip3.9 install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy
pip3.9 install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas

1.2. Numpy学习

1.2.1. numpy的几个属性

ndim: 维度
shape: 行数和列数
size: 元素个数

1.2.2. 创建数组

创建:np.array([[1,2,3],[4,5,6]])
指定数据类型:np.array([[1,2,3],[4,5,6]], dtype=np.int)
创建连续数组: np.arange(10,20,2)
创建线段型数组: np.linspace(1,10,2)
创建全零数组:np.zeros((3,4))
创建全1数组:np.ones((3,4))
创建全空数组: np.empty((3,4))
改变数组的形状: array.reshape((3,4))

1.2.3. numpy基础运算

a1 = np.array([[1,1,1],[2,2,2]])
a2 = np.array([[3,3,3],[4,4,4]])
a3 = np.array([[5,5],[6,6],[7,7]])
#加、减、乘、除、取余、取整、乘方等
a = a1 + a2
#三角函数
a = np.sin(a1)
#标准矩阵乘法
a = np.dot(a1, a3)
#随机生成一个矩阵
a = np.random.random((2,4))
#元素求和
np.sum(a)
#所有元素的最大值
np.max(a)
#每一行的最小值,axis代表维度
np.min(a, axis=1)
#最大值索引
np.argmax(a)
#最小值所有
np.argmin(a)
#平均值
np.mean(a)
#中位数
np.median(a)
#累加和
np.cumsum(a)
#相邻两元素差
np.diff(a)
#非零值
np.nonzero(a)
#逐行排序
np.sort(a)
#矩阵转置
np.transpose(a) or a.T
#修剪矩阵
np.clip(a,5,9)

1.2.4. numpy索引数据

索引a[3], a[1][2], a[1,2], a[1,:], a[1, 2:4]
行迭代 for row in a:
列迭代 for column in a.T:
按元素迭代 for item in a.flat:

1.2.5. 数组合并

a = np.array([1,1,1])
b = np.array([2,2,2])
#上下合并
np.vstack((a,b))
#左右合并
np.hstack((a,b))
#列或行增加维度
a[:,np.newaxis]
#合并--综合方法
np.concatenate((a,b), axis=1)

1.2.6. 数组分割

np.vsplit, np.hsplit, np.split, np.array_split

1.2.7. 复制

数组 a = np.arange(4)
索引复制 b = a
深度复制 b = a.copy()

1.3. Pandas学习

1.3.1. 创建pandas

numpy类似于list,pandas类似于dict,pandas基于numpy
pd.Series: 一维dict
pd.DataFrame: 多维dict,可以指定行标签和列标签,df.values为pandas基于的numpy,可以按标签或数值进行排序
df.shape: 获取行数和列数
len(df): 获取行数
len(df.columns): 获取列数
df.size: 获取元素个数
df.columns.values: 获取所有列名

1.3.2. 索引数据

共三种方法:简单索引、按标签索引,按位置索引

#索引数据简单的方法
df['A'] #按列索引数据
df[0:2] #中间有分号(切片)的话,按行进行索引数据
#按标签索引数据
df.loc['20200101', :] #参数为标签
df.loc[df['name'] == 'Pikachu'] # 获取name列的值为Pikachu的行
df.loc[df['name'] == 'Pikachu'].index # 获取到某一行后,取该行的索引值
df.loc[df['name'] == 'Pikachu']['hp'] # 获取到某一行后,取该行的hp列的值
#按位置索引数据
df.iloc[0, :] #参数为位置
#按条件索引数据
df['A'][df['B'] > 0.3]

1.3.3. 设置数据

索引到数据后,就可以设置新的值

#按标签、位置、条件索引到数据后,设置新值
df.loc['20200102', 'A'] = 111
df.iloc[1, 0] = 111
df[0][df[2] > 100] = 3
#只能按列添加数据
df['E'] = [1, 2, 3, 4, 5, 6]

1.3.4. 处理丢失数据

可以删除丢失数据的行或列,也可以填充丢失的数据

dates = pd.date_range('20201218', periods=6)
df = pd.DataFrame(np.random.random((6, 4)), index=dates, columns=list("ABCD"))
# print(dates)
print(df)
df.iloc[1, :] = np.nan
print(df)
# df.dropna(axis=0, how='any', inplace=True)
# df.fillna(value=0, inplace=True)
# print(df)
print(df.isnull())

1.3.5. 读写文件

pandas可以读写多种文件格式,例如csv, execl, json, pickle等

# data = pd.read_csv('student.csv')
data = pd.read_pickle('student.pickle')
print(data)
# data.to_pickle('student.pickle')

1.3.6. 数据合并

主要有三个方法:concat, append, merge

# concat, append
df1 = pd.DataFrame(np.ones((3, 4)) * 0, columns=list('ABCD'))
df2 = pd.DataFrame(np.ones((3, 4)) * 1, columns=['A', 'B', 'C', 'D'])
df3 = pd.DataFrame(np.ones((3, 4)) * 2, columns=list('ABCD'))
res = pd.concat([df1, df2, df3], axis=1, join='outer', ignore_index=True)
print(res)
res2 = df1.append(df2, ignore_index=False)
print(res2)
# merge 可以基于数据中的某一列或index进行合并
res3 = pd.merge(df1, df2, how='outer', on=['KEY1', 'KEY2'])

1.3.7. pandas画图

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

data = pd.DataFrame(np.random.randn(1000, 4),
                    columns=list('ABCD'))
print(data)
data = data.cumsum()
print(data)
# data.plot()
ax = data.plot.scatter(x='A', y='B', color='DarkBlue', label='Class1')
data.plot.scatter(x='A', y='C', color='LightGreen', label='Class2', ax=ax)
plt.show()

2. Matplotlib画图

matplotlib画图

3. 网页爬虫

网页爬虫

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值