0%

pandas 数据处理基础


以泰坦尼克号的数据为例介绍一下前期对数据的基础操作。

引入库

1
2
3
import csv as csv 
import pandas as pd
import numpy as np

读取文件

1
train = pd.read_csv(r"文件目录") 

此时数据的样式是: i0Tn41.jpg

数据概览

  • describe 显示整体数据常见属性
    1
    print(train.describe())
    i0TP3V.jpg
  • head tail 显示首尾一些数据
    1
    2
    print(train.head(5))
    print(train.tail(3))
    i0TFjU.jpg
  • index:索引,默认自建整型索引;columns:列;values:数据数值
    1
    2
    3
    print(train.index)
    print(train.columns)
    print(train.values)
    # 数据操作
  • T:数据的转置
    1
    print(train.T)
    i0TAuF.jpg
  • sort:可以按索引或者值进行排序,axis选择维度(行还是列),ascending选择升序或者降序,Nan永远排在最后,无论升序降序
    1
    2
    print(train.sort_index(axis=0,ascending=True))
    print(train.sort_values(by="Age",ascending=False))
    i0TEB4.jpg i0TmNR.jpg

数据选择

  • 按照标签选择,选择列,行切片
    1
    2
    print(train['Age'])
    print(train[0:9])
    i0TVHJ.jpg i0TeE9.jpg
  • 利用loc自由选择某些行某些列,可以用at替代
    1
    2
    3
    4
    5
    print(train.loc[train.index[4:6]])
    print(train.loc[:,['Age','Fare']])
    print(train.loc[3:5,['Age','Fare']])
    print(train.loc[4,'Age'])
    print(train.at[4,'Age'])
  • 利用iloc按照位置进行选择
    1
    2
    3
    4
    print(train.iloc[5])
    print(train.iloc[3:5,2:4])
    print(train.iloc[[1,2,4],[2,5]])
    print(train.iloc[3,3])
  • 布尔选择
    1
    2
    3
    print( train[ (train['Age']>40) & (train['Age']<50) ] )
    print(train[train['Parch'].isin([1,2])])
    print(train[pd.isnull(train['Age'])==True])
    i0TK9x.jpg i0TM36.jpg i0TljO.jpg

缺失值处理

  • 利用reindex选择部分数据进行拷贝,并进行缺失值处理。一些函数会自动过滤掉缺失值,比如mean()
    1
    2
    3
    4
    5
    6
    train1=train.reindex(index=train.index[0:5],columns=['PassengerId']+['Age']+['Sex'])#选择前5行,只取选定的三列
    print(train1)
    print(train1.dropna(axis=0)) #删除存在nan值的行
    print(train1.dropna(subset=['Age','Sex'])) #删除年龄性别列中存在nan值的行
    print(pd.isnull(train1)) #nan值改为true,其余值改为false
    print(train1.fillna(value=2333)) #缺失值替换为2333
    i0TcUs.jpg # 应用函数
  • 可以自己写函数并应用到数据的行或者列,通过axis参数选择行列
    1
    2
    3
    4
    5
    6
    #写函数统计包含nan值的行数
    def null_count(column):
    column_null=pd.isnull(column)
    null=column[column_null == True]
    return len(null)
    print(train.apply(null_count))
    i0TQgK.jpg
    1
    2
    3
    4
    5
    6
    #写函数对年龄列进行分类
    def judge(row):
    if pd.isnull(row['Age']) ==True:
    return 'unknown'
    return 'youngth' if row['Age']<18 else 'adult'
    print(train.apply(judge,axis=1))
    i07jFs.jpg # 数据透视表
  • 自选分类和值进行数据透视,比如按照pclass和sex分类,统计age和fare的平均值
    1
    print(train.pivot_table(index=["Pclass","Sex"], values=["Age", "Fare"], aggfunc=np.mean))
    i0T3uD.jpg

数据合并

  • 数据合并的一些操作,待补全

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    import pandas as pd
    data1 = pd.DataFrame({'level':['a','b','c','d'],
    'numeber':[1,3,5,7]})

    data2=pd.DataFrame({'level':['a','b','c','e'],
    'numeber':[2,3,6,10]})

    print("merge:\n",pd.merge(data1,data2),"\n")

    data3 = pd.DataFrame({'level1':['a','b','c','d'],
    'numeber1':[1,3,5,7]})
    data4 = pd.DataFrame({'level2':['a','b','c','e'],
    'numeber2':[2,3,6,10]})
    print("merge with left_on,right_on: \n",pd.merge(data3,data4,left_on='level1',right_on='level2'),"\n")

    print("concat: \n",pd.concat([data1,data2]),"\n")

    data3 = pd.DataFrame({'level':['a','b','c','d'],
    'numeber1':[1,3,5,np.nan]})
    data4=pd.DataFrame({'level':['a','b','c','e'],
    'numeber2':[2,np.nan,6,10]})
    print("combine: \n",data3.combine_first(data4),"\n")
    i0T8De.jpg