关于数据分析
数据分析,宽泛地理解就是对海量数据进行处理、分析等操作,从数据中得到价值。选择这个方向,你可以往数据分析师、数据挖掘、数据产品经理等方向发展。
Pandas
1.Pandas核心数据结构
Pandas是基于NumPy 构建的含有更高级数据结构和分析能力的工具包。在 NumPy 中数据结构是围绕 ndarray 展开的;而Pandas中核心数据结构是Series和DataFrame。
- Series 是个定长的字典序列,有2个基础属性:index和Values。
import pandas as pd
from pandas import Series, DataFrame
x2 = Series(data=[1,2,3,4], index=['a', 'b', 'c', 'd'])
print (x2)
a 1
b 2
c 3
d 4
dtype: int64
- DataFrame类型数据结构类似数据库表,它包括了行索引和列索引,我们可以将 DataFrame 看成是由相同索引的 Series 组成的字典类型。
import pandas as pd
from pandas import Series, DataFrame
data = {
'Chinese': [66, 95, 93, 90,80],'English': [65, 85, 92, 88, 90],'Math': [30, 98, 96, 77, 90]}
df1 = DataFrame(data, index=['zf', 'gy', 'zy', 'hz', 'dw'], columns=['English', 'Math', 'Chinese'])
print (df1)
English Math Chinese
zf 65 30 66
gy 85 98 95
zy 92 96 93
hz 88 77 90
dw 90 90 8
2.Pandas数据的导入导出
Pandas 允许直接从 xlsx,csv 等文件中导入数据,也可以输出到 xlsx, csv 等文件。
# 以excel为例,其它类似
import pandas as pd
df = pd.read_excel('C:/Users/zyf/Desktop/test.xlsx',index_col=0) # 读取导入
print(df)
df.loc['we','math']=12
print(df)
df.to_excel('C:/Users/zyf/Desktop/test1.xlsx') # 导出存储
chinese english math
姓名
zz 66 65 NaN
zf 95 85 32.0
we 95 34 56.0
chinese english math
姓名
zz 66 65 NaN
zf 95 85 32.0
we 95 34 12.0
index_col=0 就是告诉 Pandas,让它使用第一个 column(学号)的数据当做 row 索引
3.Pandas数据的常用操作
# 后续操作以此作为样例
import pandas as pd
import numpy as np
data = np.arange(-6, 6).reshape((4, 3))
df = pd.DataFrame(
data,
index=list("abcd"),
columns=list("ABC"))
print(df)
A B C
a -6 -5 -4
b -3 -2 -1
c 0 1 2
d 3 4 5
3.1 选列Column
df['B'] # 选一列
df[['B','C']] #多列
3.2 选行-loc函数
通过行索引 “Index
” 中的具体值来取行数据(如取"Index"为"a"的行)
#loc函数是基于行标签和列标签进行索引的,其基本用法为:DataFrame.loc[行标签,列标签],如下
data[1:2,1:3] # numpy中选取数据
df.loc['b':'c','B':'C'] #DataFrame中使用loc函数选取数据
df.loc[['d', 'b'], :] #选取多行数据
array([[-2, -1]]) #numpy结果
B C #pandas结果
b -2 -1
c 1 2
上述两行代码,pandas为了贴近excel使用原则,得出的结果会包含’c’、'C’对应的数据,而numpy中则是不包含的。
3.3 iloc函数
通过行号来取行数据(如取第二行的数据)。iloc
函数可以让我们直接用位置信息来筛选数据(类似numpy的思维)
# iloc函数是基于行和列的位置进行索引的,索引值从0开始,并且得到的结果不包括最后一个位置的值,其基本用法为DataFrame.iloc[行位置,列位置],如下:
data[1:2,1:3] #numpy方式
print(df.iloc[1:2,1:3]) # pandas中iloc函数
3.4 loc与iloc函数的混搭
比如现在需要取第1到第3位数据的A C两组数据,可以采用索引转换的方式
df.index
和df.columns
来调取到全部的标签,然后在用像 Numpy index 索引的方式把这些标签给筛选出来,放到.loc
里面用
row_lables= df.index[1:3]
print(df.loc[row_lables,['A','C']])
col_labels = df.columns[[0, 2]]
print(df.loc[row_labels, col_labels]) # column的labels同理
A C
b -3 -1
c 0 2
- 通过
lable
获取对应的index
信息
col_index = df.columns.get_indexer(["A", "B"])
print(df.iloc[:2, col_index])
同理,df.index.get_indexer(["a", "b"])
也可以这样获取到 label 对应的 index 信息。
3.5 条件筛选
df[df['A']<0] # 选取在A中小于0的数据
# 选在第一行数据不小于 -5 的数据
df.loc[:,df.iloc[0]>=-5] # 方式1:采用~,表示非什么
df.loc[:,~(df.iloc[0]<-5)] # 方式2:直接用 >=-5 来筛选
#用或 | 来表示 or 的意思, & 表述 and,选取选在第一行数据不小于 -4 或小于 -5 的数据
i0 = df.iloc[0]
df.loc[:, ~(i0 < -4) | (i0 < -5)]
Series和DataFrame类似,可以参考https://mofanpy.com/tutorials/data-manipulation/pandas/data-selection 后半部分
4.数据清洗
数据清洗一般是为了处理所采集数据的异常值,包括数据缺失、重复值、空行等,相当于数据预处理,使得数据标准、干净、连续,为后续数据分析、挖掘做好准备。
4.1 清洗空值
# 样例,本节以此作为例
import numpy as np
import pandas