PYTHON数据分析
程序员文章站
2022-10-19 12:42:18
一、NUMPY1.创建ndarrayimport numpy as npimport numpy as np #导入numpya1=np.array([1,2,10,4]) #利用列表构建一维数组, array里得是同一数据类型,可以是列表,元组,数组或其他序列a2=np.array([[1,2,3,4],[4,15,6,17]])#利用列表构建二维数组,可以理解为矩阵a3=np.zeros(10) / zeros_likea4=np.ones(5) / ones_likea5=np...
一、NUMPY
1.创建ndarray
import numpy as np
import numpy as np #导入numpy
a1=np.array([1,2,10,4]) #利用列表构建一维数组, array里得是同一数据类型,可以是列表,元组,数组或其他序列
a2=np.array([[1,2,3,4],[4,15,6,17]])#利用列表构建二维数组,可以理解为矩阵
a3=np.zeros(10) / zeros_like
a4=np.ones(5) / ones_like
a5=np.empty((2,2,3))
a6=np.arange(10)
a7 = np.eye(6)
2.数据类型
hot=np.dtype([('name',np.str_,10),('number',np.int64),('price',np.float64)])
print(hot)
a8= np.array([1,2,3],dtype=np.float64)
a9=a8.astype(np.int64) #转换数据类型
3.数据读入
import numpy as np
raw_DATA =
raw_data = np.loadtxt('coupon_nm_new.csv',delimiter=",",dtype=hot)
4.索引和切片
#索引第3家店铺
shop[2]
#索引第3家到第5家店铺
shop[2:6]
#赋值操作
shop[2:5]=6
#多维数组索引
arr=np.array([raw_data['团购活动ID'],raw_data['团购名'],raw_data['购买人数']])
#数组索引
arrt[0,0:3]
#通过布尔值进行索引(赋值的运算会产生布尔型数组)
raw_data[raw_data['购买人数']==50]
raw_data[(raw_data['购买人数']=50)|(raw_data['团购名']!='a')] &(和) |(或) and和or无效
#当把值赋值给一个切片时,该值会传播到整个选区
a1 = np.array([0,1,2,3,4,5,6,7,8,9])
a2 = a1[5:8]
a2[0] =999 然后a1[5]会变成999
5.数组转置和轴对换
6.统计分析及函数
#用numpy进行统计分析 sum mean std var min max
price=raw_data['团购价']
price.sort()
print('排序后团购价为:',price)
np.sum(price)
np.mean(price)
np.var(price)
np.max(price)
np.min(price)
#其他函数
np.sqrt(price)
np.square(price)
np.exp(price)
np.randn(8) #反回标准正态分布的随机数
np.maximum(数组一,数组二)
7.唯一化
二、Pandas
1.Series
2.DataFrame
3.读取文件
raw_data = pd.read_excel('文件名')
raw_data2 = pd.read_csv('文件名') #文件放在pycharmproject里
raw_data3 = pd.read_excel(r'F://````地址')
4.索引和切片
# 筛选某一列的值,返回符合条件的所有行
df1[df1[column1] == value1]
# 筛选某一列的值,返回符合条件的某一列
df1[column2][df1[column1] == value1]
# 筛选多列的值,返回符合条件的所有行
df1[df1[column1] == value1][df1[column2] == value2][...]
# 筛选多列的值,返回符合该条件的多列
df1[[column1, column2]][df1[column1] == value1][...]
raw_data.iloc[1,:] = raw_data.iloc[0,:]# 第一行赋值给第二行
#Series.iloc[第几行][第几列]
# 或raw_data.loc[第几行,列名]
#其中第几行不用数字,用值的话,需要先 raw_data.set_index('Team') 再 raw_data.loc[['TeamA’,'TeamB'],列名]
选择其中一列元素 raw_data[column1]
选择两列元素 raw_data[[column1,column2]]
选择评分大于3.5的商家所有信息 raw_data[raw_data['评分']>3.5]
打印所有列名 raw_data.columns
得到每一行的所有值raw_data.values
人均这列所有元素+100 raw_data['人均']+100
按人均排序,从小到大 raw_data.sort_values(['人均'],ascending=true)
按index排序 raw_data.sort_index()
5.排序和排名
对索引值进行排序
a.sort_index()#默认升序
a.sort_values(by=[‘a’,''b],axis=0,ascending=[False,True])#先按a列降序,再按b列升序
6.描述统计
raw_data.describe() #生成描述统计
raw_data.idxmax(最大值的索引)#最大值的索引
raw_data.max()
quantile\sum\mean\median\mad\var\std\cumsum
corr\cov\count
7.唯一值、缺失值
唯一值
显示具体的唯一值
df['col'].unique()
显示列唯一值个数
df['col'].nunique()
缺失值
a.unique()
is_null_data = raw_data[raw_data['评价数'].isnull() == True]
raw_data5 =raw_data[raw_data['评价数'].isnull() == False] #去掉缺失值后的数据
8.清洗数据
1.移除重复值
df.duplicated()#返回布尔型Series 表示各行是否有重复行
df.drop_duplicates() #返回移除了重复行后的数据
filter_words = ['人均:','人均','大概','左右','差不多']
for i in range(len(raw_data)):
value = raw_data['人均'].iloc[i]
if type(value) is int or type(value) is float:
continue
for word in filter_words:
if word in value:
raw_data.loc[i,'人均'] = raw_data.loc[i,'人均'].replace(word,'')
print(raw_data.head())
#apply() 可以随意调用任何函数
def clean_price(x):
filter_words = ['人均:', '人均', '大概', '左右', '差不多']
if type(x) is int or type(x) is float:
return x
for word in filter_words:
if word in value:
x = x.replace(word, '')
return x
9.聚类
def cate_shops(x):
if x <=2:
return 0
if x > 2 and x <= 3.5 :
return 1
if x > 3.5:
return 2
raw_data['商家等级'] = raw_data['评分'].apply(cate_shops)
cata =raw_data.groupby(by=['商家等级']).agg({'人均':'mean'}) #根据商家等级列合在一起 再用agg相加
print(cata)
10.数据表连接
pd.concat([df1,df2,df3]) #数据拼接
pd.merge(left,right,on='key') #主键相同进行内连接
pd.merge(left,right,on=['key1','key2']) #多个主键内连接
pd.merge(left,right,how='left',on=['key1','key2']) #多个主键 左连接
#两个表列名不同时,left_on='a',right_on='b'
常用操作
- 查看数据属性
df.columns #查看有哪些列
df.index #查看索引
df.dtypes #查看每列的数据类型
df.info()#查看各列数据的数据类型
df.shape #查看行列的大小
df.size #查看有多少单元格
len(df)#查看行数
- 常用方法
df.head() 返回前几行
df.tail() 返回倒数几行
df.rename(columns={'height':'Height'},inplace=True) 修改列名
df['animal'].replace('snake','python') 指定数据替换
df.collage.value_counts() 查看列为collage中元素的计数
df.sort_values(by=['Height','Weight']) 依据指定列进行排序,默认升序
df.sort_values(by=['b','a'],axis=0,ascending=[False,True]) 先对b列降序,后对a列升序
df.describe() 查看描述性统计的相关信息
max\min\sum\mean 不知道轴axis时 默认对列运算
df['visits'].sum() 对指定列求和
- 轴的使用
axis:
0值表示沿着某一列或行标签\索引值
向下执行方法
1值表示沿着某一行或列标签横向执行对应的方法 - 增加删除列的操作
df['class1'] = 1 #增加列,每次只能增加一列
df.loc['k'] = [3,'cat','no',6] #增加行名为k的一行数据
del df['class1'] #删除class1列
df.drop(labels='k',inplace=True) #删除增加的名为k行数据
df = df.drop('k')
- 缺失值和文本字符串的处理
- 缺失值
pd.isnull(df) 返回所有数据的检测结果
pd.isnull(df['a']) 对某列数据进行检测
pd.dropna(axis=0,how='any',thresh=None,inplace=False)
# any:如果存在任何NA值,则放弃该标签
# all:如果存在的值为NA值,才放弃该标签
# thresh=n 保留至少n个非NaN数据
# inplace:筛选过缺失值的新数据是保存副本还是直接在原数据上修改
df.fillnal(value=0) 用0填充缺失值
len(df.loc[(df['a'].isnull(),'a')]) 查看某列缺失值的个数
- 文本数据(字符串处理)
s =pd.Series(['A','B','C','Abba','CABA'])
s.str.strip() 去除首位空格
s.str.upper() 转为小写
s[s.str.strip().str.endswith('a')] 选取以a为结尾的数据
df['player'].str.spilt('') 对指定列数据进行分割
df['player'].str.spilt('',expand=True) 使用expand方法,将分割出的数据单独生成一列
sd['player'].str[:3] 使用[]对字符串进行切片提取
文本字符串在处理前,要先转为字符(.str)在进行处理
- 设置索引和索引提取数据(loc、iloc)
- set_index()设置多重索引
new_df = df.set_index(keys=['a','b'],append=False,drop = false)
append 是否将原索引保存
drop是否保存转换为索引的列数据
- sort_index 将索引进行排序
new_df.sort_index(na_position=‘last’,inplace=True)
na_position='last'指将缺失值放在最后进行显示
- 切片(slicers)对多重索引操作
slice表达的是范围,有几重索引就写几个条件,用冒号代表去全部的列
第一重索引取值范围0-1000
第二重索引取值为给定值
第三重索引没给限定条件
new_df.loc[(slice(0,1000),['a','b'],slice(None)),:]
- reset_index还原索引
new_df.reset_index(drop=True)
iloc是按照位置索引,loc是按照名称索引
- 数据的查询、修改、分组计算
1.查询
df[ (df['a']>=2000) | (df['a']<=1700)] #条件为或
df[ (df['a']>=2000) & (df['a']<=1700)] #条件为和
df.loc[(df['a']>=10) &(df['b']>8)]
df[ (df['a']>=10) & (df['b']>=8)]
2.修改
df.loc[df['a']=='yes','a'] ='True' #只是修改了值,并未修改数据类型
df['a'] =df['a'].map({'yes':True,'no':False}) #值和数据类型都修改
3.分组计算
- 分组查看每组大小
df.groupby(‘a’).size()
- 单个统计量
grouped['a'].sum() #grouped是储存分组数据的变量
- 多个统计量
grouped['a'].agg([np.mean,np.sum])
- 对所有列球多个统计量
grouped['a'].agg([np.mean,np.sum])
- 不同列球不同统计量
grouped['a'].agg({'a':np.mean,'b':np.sum})
本文地址:https://blog.csdn.net/weixin_46528046/article/details/107100134
上一篇: Moto 360终结,联想无限期推迟新款智能手表发布
下一篇: Java字符串常用的方法汇总