Numpy+Pandas基础梳理

Numpy: numpy提供了两种基本的对象:

1.ndarray:是存储单一数据类型的多维数组

  np.array(data,dtype)    #data可以是列表、元组、多维数组 ,dtype默认为None

  np.arange(0,1,0.2)       #指定起始值为0,终值为1,步长为0.2的一维数组,结果不包含终值

  np.linspace(0,1,5)       #指定起始值为0,终值为1,个数为5的一维数组,等差数列

    np.logspace(0,1,5)       #指定起始值为0,终值为1,个数为5的一维数组,等比数列

  np.zeros([3,3])   np.ones(5)   np.diag([1,2,3])    #全零,全一,对角矩阵

  np.random.rand(5)        #生成[0,1]随机数组,浮点数   .randint()生成整数

  np.concatenate((arr1,arr2),axis=0)     #合并数组,axis=1横向合并,axis=0纵向合并

  np.split(arr,2,axis=1)   #横向分割时,同hsplit()   纵向分割时,同vsplit()

2.ufunc:是一种能够对数组进行处理的函数

  (1)四则运算:数组间的四则运算是对每个数组中的元素分别进行四则运算,所以形状必须相同。

  (2)比较运算:比较运算返回的结果是一个布尔数组,每个元素为每个数组对应元素的比较结果。

  (3)逻辑运算:np.any表示逻辑‘or’,np.all表示逻辑‘and’,运算结果返回布尔值。

3.统计与分析:

  (1)读/写文本文件  np.loadtxt("路径",delimiter=',')

            np.savetxt("path",arr,fmt='%d',delimiter=',')

  (2)排序:np.sort(a,axis,kind,order)    #arr.sort()

  (3)重复数据:np.repeat(a,reps='重复次数',axis) 去重:np.unique(arr)

  (4)统计函数:np.sum()、np.mean()、np.std()、np.var()、np.max()、np.min()

 

Pandas: pandas有三种数据结构:Series、DataFrame、Panel

1.Series是一种一维数组对象,包含一个值序列、数据标签(索引)

  pd.Series(data,index)                   #创建Series,index可不指定;data为列表或字典

2.DataFrame是一个表格型的数据结构,包含一组有序的列

  pd.DataFrame(data,columns=['1','2','3'])#通常传入一个由等长列表或Numpy数组组成的字典

3.常用操作:

  设置索引:df.set_index('new_index')

  重置索引:df.reset_index(drop=True,inplace=True) #drop=True,原有索引就不会成为新的列

  更改列名:1.直接法:df.columns = ['grammer', 'score', 'cycle', 'id']
       2.使用rename()函数:df.rename(columns={'col1':'grammer', 'col2':'score'},inplace=True) 

  更改列的顺序:order = df.columns[[0, 3, 1, 2]]      # 或者order = ['xx', 'xx',...] 具体列名

  删除存在缺失值的行:df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

  删除重复的列:df3.drop_duplicates().T.drop_duplicates().T          #需要转置矩阵

  排序:df.sort_values(by='列名', ascending=True)    #注:ascending:True升序,False降序

  统计频次:df.value_counts()

  数组去重:df.unique()   drop_duplicates()

  查看数据描述:df.describe()        #包含count、mean、std、min、25%、50%、75%、max

4.数据处理、合并、分组:

  (1)数据处理

  查看每列数据缺失值:df.isnull().sum()    #df.isnull().values.any()查看是否有缺失值

  缺失值填充:

    1.上下均值填充:df['value'] = df['value'].fillna(df['value'].interpolate())  

    2.用1替换:df.fillna(value =1.0, inplace = True)

  设置缺失值:df.loc[:2] = np.nan

  删除缺失值:df.dropna(axis=0, how='any', inplace=True)  # 删除所有存在缺失值的行

  数据类型转换:

    df['value2'].round(2)          #设置value2列保留两位小数

    df['value2'].map(lambda x : ('%.2f') % x)   #保留两位小数

    df['timestr']=df['timestr'].apply(lambda x : int(x))    将某列从str转为int

    df['value2'] = df['value2'].astype('float')

    crime.Year = pd.to_datetime(crime.Year,format='%Y')  #将Year的数据类型转换为datetime64

  提取,筛选:

    1.某列最大值所在的行:df[df['value'] == df['value'].max()]

    2.学历为本科和硕士,只显示学历和薪资两列:

      df[df['education'].isin(['本科', '硕士'])][['education', 'salary']]

      df.loc[df['education'].isin(['本科', '硕士']), ['education', 'salary']]

    3.提取salary列以'25k'开头的行:

      df[df['salary'].str.match('25k')]

      df[df['salary'].str.startswith('25k')]

    4.提取value列中不在value1列出现的:

      df['value'][~df['value'].isin(df['value1'])] #~取反

  数据拆分:df['salary'].str.split('-')     #按照-拆分

  (2)数据分组

  根据索引或字段对数据进行分组:  df.groupby('course').mean()  #分组求平均

  数据分成多个区间:pd.cut(ages, [0,5,20,30], labels=[u"婴儿",u"青年",u"中年"],retbins=True)

  分组统计:df.groupby('hour').education.value_counts()       #按hour分组,统计各个学历的个数

  (3)数据聚合

  df.agg({'a':np.mean,'b':np.sum,'c':[np.std,np.mean]})  #计算不同字段不同数目的统计量

  df.groupby(['a','b'])['c'].transform('mean').sample(5) #通过transform方法将运算分布到每一行

  df.groupby(['a','b'])['c'].apply(np.mean)              #类似agg,将函数应用于每一列

 

posted @ 2022-02-20 16:50  hungry_J  阅读(24)  评论(0)    收藏  举报