zoukankan      html  css  js  c++  java
  • 数据探索及数据处理&文本数据的处理(一)

    part1数据探索及数据处理

    数据探索

    import pandas as pd
    
    # 导入数据集
    df = pd.read_excel("~/user_orders.xlsx")
    # 查看前五行
    print('查看前五行:',df.head())

    查看前五行:      id   name  gender   age  edu custom_amt   order_date
    0   890  李小胆李l  female  43.0  NaN   ¥2177.94  2018年12月25日
    1  2391  881xt    male  52.0  NaN   ¥2442.18   2017年5月24日
    2  2785  haoah    male  39.0  NaN    ¥849.79   2018年5月15日
    3  1361  snaen  female  26.0  NaN   ¥2482.22   2018年5月16日
    4   888  sue女少  female  61.0   本科    ¥2027.9   2018年1月21日

    # 查看后七行
    print('查看后七行:',df.tail(7))

    查看后七行:         id   name  gender   age  edu custom_amt  order_date
    2997  1270  是大航oj    male  32.0  NaN    ¥115.92  2018年7月23日
    2998   835  嗒白白嗒蘇  female  40.0   本科    ¥897.26  2017年4月15日
    2999  2926  宝哒哇是我  female   NaN  NaN    ¥542.02   2018年9月1日
    3000  1616  和花花豆豆  female  64.0   本科   ¥2593.38  2018年11月3日
    3001  1129  小清新桉蓝  female  61.0  NaN    ¥139.68  2018年11月7日
    3002   674  xyyx毓  female  34.0   本科    ¥670.89   2018年6月8日
    3003   229  大侦探野荒    male  64.0  NaN    ¥118.37  2018年7月13日

    # 查看数据的规模
    print('数据的规模:',df.shape)

    数据的规模: (3004, 7)

    # 查看数据行索引
    print('行索引',df.index)

    行索引 RangeIndex(start=0, stop=3004, step=1) #前包后不包

    # 查看数据列名
    print('数据列名',df.columns)

    数据列名 Index(['id', 'name', 'gender', 'age', 'edu', 'custom_amt', 'order_date'], dtype='object')
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 3004 entries, 0 to 3003
    Data columns (total 7 columns):
     #   Column      Non-Null Count  Dtype  
    ---  ------      --------------  -----  
     0   id          3004 non-null   int64  
     1   name        3004 non-null   object
     2   gender      2868 non-null   object
     3   age         2904 non-null   float64
     4   edu         1073 non-null   object
     5   custom_amt  3004 non-null   object
     6   order_date  3004 non-null   object
    dtypes: float64(1), int64(1), object(5)
    memory usage: 164.4+ KB

    # 查看整体信息
    print('整体信息',df.info())

    整体信息 None

    # 进行简单描述统计,默认统计数值类型
    print('描述统计',df.describe())

    描述统计                 id          age
    count  3004.000000  2904.000000
    mean   1499.905459    41.605028
    std     865.906555    14.158348
    min       1.000000    19.000000
    25%     750.750000    30.000000
    50%    1499.500000    40.000000
    75%    2249.250000    55.000000
    max    3000.000000   230.000000

    # 查看数据集是否存在缺失值
    print('缺失值',df.isnull())
    print('缺失值个数',df.isnull().sum())

    缺失值          id   name  gender    age    edu  custom_amt  order_date
    0     False  False   False  False   True       False       False
    1     False  False   False  False   True       False       False
    2     False  False   False  False   True       False       False
    3     False  False   False  False   True       False       False
    4     False  False   False  False  False       False       False
    ...     ...    ...     ...    ...    ...         ...         ...
    2999  False  False   False   True   True       False       False
    3000  False  False   False  False  False       False       False
    3001  False  False   False  False   True       False       False
    3002  False  False   False  False  False       False       False
    3003  False  False   False  False   True       False       False

    [3004 rows x 7 columns]

    缺失值个数 id               0
    name             0
    gender         136
    age            100
    edu           1931
    custom_amt       0
    order_date       0
    dtype: int64

    # 查看数据是否存在重复值
    print('重复值',df.duplicated())
    print('重复值个数',df.duplicated().sum())

    重复值 0       False
    1       False
    2       False
    3       False
    4       False
            ...  
    2999    False
    3000    False
    3001    False
    3002    False
    3003    False
    Length: 3004, dtype: bool


    重复值个数 4

    # 提取某一列
    print('提取某一列',df["gender"])

    提取某一列 0       female
    1         male
    2         male
    3       female
    4       female
             ...  
    2999    female
    3000    female
    3001    female
    3002    female
    3003      male
    Name: gender, Length: 3004, dtype: object

    # 提取行
    print('提取行',df[:2])
     # 左闭右开


    提取行      id   name  gender   age  edu custom_amt   order_date
    0   890  李小胆李l  female  43.0  NaN   ¥2177.94  2018年12月25日
    1  2391  881xt    male  52.0  NaN   ¥2442.18   2017年5月24日

    ## 基于标签的索引——loc方法
    # 提取数据的5-10行,并返回其姓名、年龄、交易额
    print('5-10行,并返回其姓名、年龄、交易额',df.loc[5:10,["name","age","custom_amt"]])


    5-10行,并返回其姓名、年龄、交易额      name   age custom_amt
    5   824bt  42.0    ¥854.57
    6   angil  64.0   ¥2661.94
    7   280_t  32.0     ¥70.66
    8   ugvuf  48.0   ¥2346.97
    9   王歆允歆王  60.0     ¥658.3
    10  641兔小  37.0   ¥1751.68

    # 设置索引
    df1 = df.set_index("name")
    print('设置索引',df1.head())


    设置索引          id  gender   age  edu custom_amt   order_date
    name                                                  
    李小胆李l   890  female  43.0  NaN   ¥2177.94  2018年12月25日
    881xt  2391    male  52.0  NaN   ¥2442.18   2017年5月24日
    haoah  2785    male  39.0  NaN    ¥849.79   2018年5月15日
    snaen  1361  female  26.0  NaN   ¥2482.22   2018年5月16日
    sue女少   888  female  61.0   本科    ¥2027.9   2018年1月21日

    # 提取某位用户的信息,并返回其姓名、年龄、学历
    print('提取某位用户的信息',df1.loc[["615uy"],["gender","age","edu"]])


    提取某位用户的信息        gender   age  edu
    name                    
    615uy  female  35.0  NaN

    # 提取某位用户的全部信息
    print('提取某位用户的全部信息',df1.loc["615uy",:])
    print('提取某位用户的全部信息',df.loc[df["name"]=="615uy",:])


    提取某位用户的全部信息 id                  1863
    gender            female
    age                   35
    edu                  NaN
    custom_amt      ¥1515.64
    order_date    2017年9月22日
    Name: 615uy, dtype: object


    提取某位用户的全部信息        id   name  gender   age  edu custom_amt  order_date
    323  1863  615uy  female  35.0  NaN   ¥1515.64  2017年9月22日

    # 提取年龄小于20的用户信息
    print('年龄小于20的用户信息',df.loc[df["age"]<20,:])
     # 第一个位置设置索引,第二个位置取列


    年龄小于20的用户信息         id   name  gender   age  edu custom_amt   order_date
    170    796  e慕月ra  female  19.0  NaN   ¥1674.06  2017年11月21日
    175   1481  野千昭野宫    male  19.0  NaN    ¥912.69   2017年3月10日
    235    345  悸01初如  female  19.0  NaN    ¥1039.5   2018年5月10日
    303   2386  657护守    male  19.0  NaN   ¥1432.64    2017年9月2日
    372   1190  范万莉万范    male  19.0   本科   ¥1426.22  2018年11月21日
    378   1396  120菲菲  female  19.0  NaN    ¥351.32    2017年1月6日
    444   2502  老鸨1老老  female  19.0   硕士   ¥2305.88    2017年8月2日
    471    738  尼玛哥尼冉     NaN  19.0  NaN      ¥2885   2017年3月22日
    531   2207  080_t  female  19.0  NaN   ¥1051.39   2018年3月14日
    560    178  ong龙晓  female  19.0  NaN   ¥2441.18   2017年3月25日
    575   2194  两个叉易木  female  19.0   本科    ¥716.42  2018年12月19日
    657    826  幺小三狸狐  female  19.0  NaN    ¥201.61    2017年3月7日
    681   2128  hbbzl  female  19.0  NaN    ¥761.81   2018年9月15日
    704   2076  122jy  female  19.0   本科    ¥150.96   2018年6月13日
    761    873  055ik  female  19.0  NaN   ¥2236.27   2017年2月19日
    801    290  茕花败茕墨  female  19.0   硕士   ¥1414.49   2017年9月18日
    828    154  拉丫头聊无    male  19.0  NaN   ¥1362.29    2018年9月6日
    879    402  123小于  female  19.0   本科   ¥1057.19   2018年7月19日
    891   2645  799hs  female  19.0  NaN   ¥1052.94  2018年10月21日
    981    582  8516z  female  19.0  NaN   ¥2973.64    2017年3月7日
    1025  1651  977hg  female  19.0   本科   ¥2454.87   2017年1月25日
    1052  1007  301爱我  female  19.0   本科   ¥2028.89    2017年7月3日
    1226  2779  611bt    male  19.0  NaN    ¥181.57  2017年12月22日
    1232  1917  186ux    male  19.0  NaN   ¥2166.13    2018年1月9日
    1372  2122  186bt  female  19.0  NaN    ¥342.07  2018年10月21日
    1420  1493  山雪尽等我  female  19.0  NaN   ¥1212.02   2018年12月1日
    1441  1097  7280杨  female  19.0  NaN     ¥764.9   2017年3月21日
    1459    31  ilsdk  female  19.0  NaN   ¥1015.74   2017年7月17日
    1569   659  620hy  female  19.0  NaN   ¥1957.23    2018年5月1日
    1640  1393  ci黧iv  female  19.0  NaN   ¥2147.35    2018年9月2日
    1652   443  031eh  female  19.0   博士    ¥281.09   2018年2月23日
    1693   774  ng泽ug  female  19.0  NaN   ¥1116.14  2018年12月25日
    1713   712  549情你  female  19.0   博士    ¥1948.8  2018年12月11日
    1721  1325  过云烟气天  female  19.0  NaN   ¥1712.08   2017年8月12日
    1738  1469  院校花京南    male  19.0  NaN   ¥1097.63  2017年10月16日
    1762   195  220钺沐  female  19.0   硕士    ¥475.62    2018年3月1日
    1769  1440  很难训难很  female  19.0  NaN   ¥1633.44   2018年12月9日
    1835  1739  家小姐邝邝  female  19.0  NaN   ¥1028.28   2018年4月13日
    1885  1877  ghhel  female  19.0  NaN   ¥2282.67  2017年12月24日
    1927  1235  opyac  female  19.0  NaN    ¥933.92   2017年5月11日
    1938  1398  菜宫殿菜白    male  19.0   博士   ¥2776.58    2017年1月9日
    1959  2374  ang81    male  19.0  NaN   ¥2779.59   2017年3月11日
    2010  1437  nny阿阿  female  19.0   硕士    ¥474.53    2017年5月3日
    2085  2049  123ht  female  19.0   本科    ¥133.11   2017年5月27日
    2343  2841  白茶僧茶白    male  19.0   硕士   ¥1527.47   2017年2月26日
    2413  1352  百89方正  female  19.0  NaN    ¥163.97   2017年7月11日
    2415  2389  030bt    male  19.0   本科     ¥88.62   2017年3月26日
    2549  1295  小可爱玖馥    male  19.0  NaN   ¥2061.28   2018年2月12日
    2654  1856  renhs    male  19.0  NaN    ¥708.82    2017年9月4日
    2963  1770  小婷婷的m     NaN  19.0   硕士    ¥471.97   2017年4月25日

    ## 基于位置的索引——iloc方法,隐式索引
    print('索引4~9',df.iloc[4:10,:])


    索引4~9      id   name  gender   age  edu custom_amt   order_date
    4   888  sue女少  female  61.0   本科    ¥2027.9   2018年1月21日
    5  2387  824bt    male  42.0   本科    ¥854.57    2018年7月6日
    6   244  angil    male  64.0  NaN   ¥2661.94   2018年8月23日
    7  1155  280_t  female  32.0  NaN     ¥70.66    2017年1月6日
    8  2623  ugvuf    male  48.0  NaN   ¥2346.97   2017年2月11日
    9  1782  王歆允歆王     NaN  60.0   本科     ¥658.3  2017年11月15日

    #
    print('df1中索引为人名,但iloc使用数字',df1.iloc[3:6,[1,3,5]])


    df1中索引为人名,但iloc使用数字        gender  edu  order_date
    name                          
    snaen  female  NaN  2018年5月16日
    sue女少  female   本科  2018年1月21日
    824bt    male   本科   2018年7月6日

    # 随机取样
    # DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)
    # 数量,按比例,抽样数量大于原样本为True(存在重复),权重,随机种子(确保每次抽取的样本相同),01
    print(df.sample(2))

            id   name  gender   age  edu custom_amt  order_date
    517   2616  哔比里哔黑    male  35.0   本科    ¥732.52   2018年2月2日
    1222   684  鹉福根鹉鹦  female  40.0  NaN   ¥2335.64  2018年6月12日

    print(df.sample(frac=0.002))

    id   name  gender   age  edu custom_amt   order_date
    2052   903  975丽叶    male  61.0   硕士   ¥2912.87   2018年10月3日
    2842   915  子璐璐子胖    male  56.0  NaN    ¥178.97   2017年6月10日
    580   2968  大爷额滴俺    male   NaN  NaN   ¥2326.83    2018年7月1日
    99     321  北等待北台  female  30.0   本科    ¥106.23  2018年11月27日
    1579  1652  666神男    male  30.0  NaN   ¥1357.24   2018年3月18日
    315   2019  爱小娟彭小  female  26.0   本科   ¥2587.95   2018年4月16日

    df2 = df.iloc[:5,:]
    df2
    
    print(df2.shape)

    (5, 7)

    print(df2.sample(n=8, replace=True)) # 数量大于原数据

    id   name  gender   age  edu custom_amt   order_date
    3  1361  snaen  female  26.0  NaN   ¥2482.22   2018年5月16日
    D:ProgramDataAnaconda3libsite-packagespandascoreindexing.py:1596: SettingWithCopyWarning:
    0   890  李小胆李l  female  43.0  NaN   ¥2177.94  2018年12月25日
    0   890  李小胆李l  female  43.0  NaN   ¥2177.94  2018年12月25日
    A value is trying to be set on a copy of a slice from a DataFrame.
    4   888  sue女少  female  61.0   本科    ¥2027.9   2018年1月21日
    Try using .loc[row_indexer,col_indexer] = value instead
    2  2785  haoah    male  39.0  NaN    ¥849.79   2018年5月15日

    1  2391  881xt    male  52.0  NaN   ¥2442.18   2017年5月24日
    0   890  李小胆李l  female  43.0  NaN   ¥2177.94  2018年12月25日
    See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
    3  1361  snaen  female  26.0  NaN   ¥2482.22   2018年5月16日

    w = [0, 0, 0.2, 0.4, 0.4]
    df2.loc[:,'权重'] = w # 添加一列:权重
    print(df2)

    id   name  gender   age  edu custom_amt   order_date   权重
    D:ProgramDataAnaconda3libsite-packagespandascoreindexing.py:1745: SettingWithCopyWarning:
    0   890  李小胆李l  female  43.0  NaN   ¥2177.94  2018年12月25日  0.0
    A value is trying to be set on a copy of a slice from a DataFrame.
    1  2391  881xt    male  52.0  NaN   ¥2442.18   2017年5月24日  0.0
    Try using .loc[row_indexer,col_indexer] = value instead
    2  2785  haoah    male  39.0  NaN    ¥849.79   2018年5月15日  0.2

    See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
    3  1361  snaen  female  26.0  NaN   ¥2482.22   2018年5月16日  0.4
      isetter(ilocs[0], value)
    4   888  sue女少  female  61.0   本科    ¥2027.9   2018年1月21日  0.4

    print(df2.sample(n=2, weights='权重'))

    id   name  gender   age  edu custom_amt  order_date   权重
    3  1361  snaen  female  26.0  NaN   ¥2482.22  2018年5月16日  0.4
    2  2785  haoah    male  39.0  NaN    ¥849.79  2018年5月15日  0.2

    print(df2.sample(n=2, axis=None))

    id   name  gender   age  edu custom_amt  order_date   权重
    3  1361  snaen  female  26.0  NaN   ¥2482.22  2018年5月16日  0.4
    2  2785  haoah    male  39.0  NaN    ¥849.79  2018年5月15日  0.2

    print(df2.sample(n=2,random_state=345))

         id   name  gender   age  edu custom_amt  order_date   权重
    3  1361  snaen  female  26.0  NaN   ¥2482.22  2018年5月16日  0.4
    2  2785  haoah    male  39.0  NaN    ¥849.79  2018年5月15日  0.2

    part2文本数据的处理

  • 相关阅读:
    矩阵遍历 局部处理 661. 图片平滑器
    最小堆make_heap(), pop_heap()和push_heap()
    vector<pair<int, int>>或者有序map
    简单的滑动窗口 643. 子数组最大平均数 I
    js中getYear()和getFullYear()的区别
    异常:No WebApplicationContext found: no ContextLoaderListener registered?
    异常:Duplicate key or integrity constraint violation message from server: "Duplicate entry '0' for key 1"
    异常:the type net.sf.hibernate.lockmode cannot be resolved, it is indirectly referenced from required .class files
    使用cxf写web service的简单实例
    struts1多文件上传、下载实例
  • 原文地址:https://www.cnblogs.com/Cookie-Jing/p/14837723.html
Copyright © 2011-2022 走看看