• (2) python--pandas


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    import pandas as pd
    import numpy as np
     
    # 创建的Series几种方式
    s1 = pd.Series(range(4))
    s2 = pd.Series([0123])
    s3 = pd.Series(np.arange(4))
    print(s1)
    '''
    0    0
    1    1
    2    2
    3    3
    dtype: int64
    '''
    print(s2)
    '''
    0    0
    1    1
    2    2
    3    3
    dtype: int64
    '''
    print(s3)
    '''
    0    0
    1    1
    2    2
    3    3
    dtype: int32
    '''
     
     
    # 之前在numpy中说过Series相当于给array加上了index。如果不定义index那么默认为0,1,2····
    s4 = pd.Series(["satori""mashiro""nagisa""sora"], index=["东方地灵殿""樱花庄的宠物女孩""clannad""缘之空"])
    print(s4)
    '''
    东方地灵殿        satori
    樱花庄的宠物女孩    mashiro
    clannad      nagisa
    缘之空            sora
    dtype: object
    '''
    # 并且索引还可以重复
    s5 = pd.Series(["satori""tomoyo""mashiro""nagisa""sora"], index=["东方地灵殿""clannad""樱花庄的宠物女孩""clannad""缘之空"])
    print(s5)
    '''
    东方地灵殿        satori
    clannad      tomoyo
    樱花庄的宠物女孩    mashiro
    clannad      nagisa
    缘之空            sora
    dtype: object
    '''
    print(s5["clannad"])
    '''
    clannad    tomoyo
    clannad    nagisa
    dtype: object
    '''
     
    # 即便定义了index仍然可以通过索引来获取
    print(s5[0])  # satori
    print(s5[1])  # tomoyo
    print(s5[2])  # mashiro
    print(s5[3])  # nagisa
    print(s5[4])  # sora

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    import pandas as pd
    import numpy as np
     
    # DataFrame相当于二维的Series,行索引为0,1,2····,列索引如果不指定也为0,1,2····
    df = pd.DataFrame(np.arange(12).reshape(34))
    print(df)
    '''
       0  1   2   3
    0  0  1   2   3
    1  4  5   6   7
    2  8  9  10  11
    '''
    # head,接收一个整型,表示打印前多少行的数据
    # tail,接收一个整型,表示打印后多少行的数据
    print(df.head(2))
    '''
       0  1  2  3
    0  0  1  2  3
    1  4  5  6  7
    '''
    print(df.tail(2))
    '''
       0  1   2   3
    1  4  5   6   7
    2  8  9  10  11
    '''
     
     
    # -------------------------------
    df = pd.DataFrame(np.arange(12).reshape(34), columns=["A""B""C""D"])
    print(df)
    '''
       A  B   C   D
    0  0  1   2   3
    1  4  5   6   7
    2  8  9  10  11
    '''
     
     
    # 通过索引或者切片获取元素
    # 如果直接使用df的话,那么不能通过df[,]的方式,只能df[][],df[]找到对应的列(注意是列),df[][]再找到当前列的某个值
    print(df["A"][1])  # 4
    # 如果我一定要通过df[,]的方式呢?
    # 有以下几种方式
    # iloc,一定要传入索引。行就不必说了,列虽然我们指定了名字,但仍然可以通过索引来传值。A的索引是0,B的索引是1·····,当然这里还是按照行和列的顺序的
    print(df.iloc[01])  # 1
    # iloc是通过索引传的,如果我想用值传呢?使用loc,而且loc只能传值。行的索引和值都相同,但列必须穿指定的index
    print(df.loc[0"B"])  # 1
    # at,同样需要传入值
    print(df.at[0"B"])  # 1
    # ix,既可以传值,又可以传索引。但是貌似要被移除了,提示使用iloc或者loc。
    print(df.ix[0"B"], df.ix[01])  # 1 1
     
    # 数据的形状
    print(df.shape)  # (3, 4)
     
    # 数据的类型
    print(df.dtypes)
    '''
    A    int32
    B    int32
    C    int32
    D    int32
    dtype: object
    '''
     
    # 数组的维度
    print(df.ndim)  # 2,表明两行四列,维度是2
     
    # 数组元素的个数
    print(df.size)  # 12
     
    # 数组的索引
    print(df.index)  # RangeIndex(start=0, stop=3, step=1)
     
    # 数组的列名
    print(df.columns)  # Index(['A', 'B', 'C', 'D'], dtype='object')
     
    # 数组的值,打印的是一个array
    print(df.values)
    '''
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]]
    '''
     
    # 整体信息描述
    print(df.describe())
    '''
             A    B     C     D
    count  3.0  3.0   3.0   3.0
    mean   4.0  5.0   6.0   7.0
    std    4.0  4.0   4.0   4.0
    min    0.0  1.0   2.0   3.0
    25%    2.0  3.0   4.0   5.0
    50%    4.0  5.0   6.0   7.0
    75%    6.0  7.0   8.0   9.0
    max    8.0  9.0  10.0  11.0
    '''

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    import pandas as pd
     
    # 关于pandas如何读取文件
    # pd.read_sql(sql, conn)
        # 读取数据库里的文件,sql为查询的函数,conn则为数据库驱动的connect,或者SQLAlchemy的create_engine()创建的一个引擎
    # pd.read_csv(),用来处理CSV文件
        # 这里面的参数非常多,介绍几个常用的
        # 第一个参数:一定要传文件路径或者buf。后面的参数,传入的时候最好加上参数名
        # 第二个参数:sep,表示用什么分割,不指定的话默认用空格
        # 第三个参数:usecols,如果csv文件中有很多列,而我们只需要某几个,这个时候就可以使用usecols,将需要筛选的列作为列表传给usecols
        # 第四个参数:nrows,有的时候我们不一样要全部读到内存中,所有nrows指定读取的行数
        # 第五个参数:index_col,将内容读到DataFrame的时候,选择哪一列作为索引。
        # 第六个参数:encoding,选择编码,除了文件路径
    # pd.read_excel(),用来处理Excel文件
        # 参数依旧有很多,想介绍的和read_csv()差不多
        # 第一个参数:文件名路径
        # 第二个参数:sheetname
        # 后面的参数和read_csv()类似
    # pd.read_table(),用来处理TXT文件
        # 参数有很多,和read_csv()传参一样,
     
     
    # 这里介绍处理CSV,其实主要还是把内容读成DataFrame之后的操作,从这个角度来说,读取什么文件不重要,重要的是在读取之后如何进行操作
    df = pd.read_csv(r"C:UsersAdministratorDesktopsatori.csv", encoding="gbk")
    print(df)
    # 可以看到文件全部读进来了
    '''
         姓名  年龄      登场作品 性别  发色
    0  古明地觉  16     东方地灵殿  女  紫红
    1  椎名真白  17  樱花庄的宠物女孩  女  金色
    2   宫园薰  16   四月是你的谎言  女  金色
    3  春日野穹  15       缘之空  女  银白
    4   古河渚  18   clannad  女  棕色
    5  坂上智代  17   clannad  女  银白
    6  雨宫优子  16      悠久之翼  女  黑色
    7  四方茉莉  17      sola  女  黑色
    '''
     
    # ---------------------------
    '''
    # 测试nrows
    df = pd.read_csv(r"C:\UsersAdministratorDesktopsatori.csv", encoding="gbk", nrows=3)
    print(df)
    # 可以看到我们只读了三行
         姓名  年龄      登场作品 性别  发色
    0  古明地觉  16     东方地灵殿  女  紫红
    1  椎名真白  17  樱花庄的宠物女孩  女  金色
    2   宫园薰  16   四月是你的谎言  女  金色
     
    '''
     
    # ------
    '''
    # 测试usecols,注意这里的usecols还可以用对应的索引代替,从零开始慢慢数。
    df = pd.read_csv(r"C:\UsersAdministratorDesktopsatori.csv", encoding="gbk", nrows=3, usecols=["姓名", "发色"])
    print(df)
    # 可以看到在读取了三行的基础上,只读了两列
         姓名  发色
    0  古明地觉  紫红
    1  椎名真白  金色
    2   宫园薰  金色
    '''
     
    # --------
    # 现在df长这个样子
    print(df)
    '''
         姓名  年龄      登场作品 性别  发色
    0  古明地觉  16     东方地灵殿  女  紫红
    1  椎名真白  17  樱花庄的宠物女孩  女  金色
    2   宫园薰  16   四月是你的谎言  女  金色
    3  春日野穹  15       缘之空  女  银白
    4   古河渚  18   clannad  女  棕色
    5  坂上智代  17   clannad  女  银白
    6  雨宫优子  16      悠久之翼  女  黑色
    7  四方茉莉  17      sola  女  黑色
     
    '''
     
    # 筛选出年龄大于16的
    print(df[df["年龄"] > 16])
    '''
         姓名  年龄      登场作品 性别  发色
    1  椎名真白  17  樱花庄的宠物女孩  女  金色
    4   古河渚  18   clannad  女  棕色
    5  坂上智代  17   clannad  女  银白
    7  四方茉莉  17      sola  女  黑色
    '''
     
    # 将每个人的年龄减去一
    df["年龄"= df["年龄"].apply(lambda x: x-1)
    print(df)
    '''
         姓名  年龄      登场作品 性别  发色
    0  古明地觉  15     东方地灵殿  女  紫红
    1  椎名真白  16  樱花庄的宠物女孩  女  金色
    2   宫园薰  15   四月是你的谎言  女  金色
    3  春日野穹  14       缘之空  女  银白
    4   古河渚  17   clannad  女  棕色
    5  坂上智代  16   clannad  女  银白
    6  雨宫优子  15      悠久之翼  女  黑色
    7  四方茉莉  16      sola  女  黑色
    '''
     
    # ---------------
    '''
    # 假设df当中存在名为"时间"的时间戳,怎么转化为我们看着舒服的日期呢?
    df["时间"] = pd.to_datetime(df["时间"], format="%Y-%d-%m", errors="coerce")
    '''
     
    # 查找姓名中包含宫的
    print(df[df["姓名"].str.contains("宫")])
    '''
         姓名  年龄     登场作品 性别  发色
    2   宫园薰  15  四月是你的谎言  女  金色
    6  雨宫优子  15     悠久之翼  女  黑色
    '''
     
    # 查找年龄为14或者16的
    print(df[df["年龄"].isin([1416])])
    '''
         姓名  年龄      登场作品 性别  发色
    1  椎名真白  16  樱花庄的宠物女孩  女  金色
    3  春日野穹  14       缘之空  女  银白
    5  坂上智代  16   clannad  女  银白
    7  四方茉莉  16      sola  女  黑色
    '''
     
    # 将DataFrame按照年龄排序,如果按照多个列排序,那么将多个列组成一个列表传进去
    # 参数里面还有一个ascending=True,表示正序排,inplace=False,表示不在原来的DataFrame上操作,而是返回一个新的DataFrame
    print(df.sort_values(by="年龄"))
    '''
         姓名  年龄      登场作品 性别  发色
    3  春日野穹  14       缘之空  女  银白
    0  古明地觉  15     东方地灵殿  女  紫红
    2   宫园薰  15   四月是你的谎言  女  金色
    6  雨宫优子  15      悠久之翼  女  黑色
    1  椎名真白  16  樱花庄的宠物女孩  女  金色
    5  坂上智代  16   clannad  女  银白
    7  四方茉莉  16      sola  女  黑色
    4   古河渚  17   clannad  女  棕色
    '''
     
    # 计算不同年龄的出现的次数
    print(df["年龄"].value_counts())
    '''
    15    3
    16    3
    14    1
    17    1
    Name: 年龄, dtype: int64
    '''
    print(type(df["年龄"].value_counts()))  # <class 'pandas.core.series.Series'>
     
     
    # groupby汇总,如果按照多列汇总,那么将多列组合成一个列表传进去
    # 里面的as_index,默认为True,说明汇总之后,传给by的列名要作为索引,如果多个列,那么共同作为索引
    # 里面的sort=True,表示汇总之后自动排序
    # 按照发色汇总,count表示每一种发色总共对应多少个name
    print(df[["姓名""发色"]].groupby(by="发色").count())
    '''
        姓名
    发色   
    棕色   1
    紫红   1
    金色   2
    银白   2
    黑色   2
    '''
    # 除了count还有sum,比方我想按照"发色"汇总年龄,把发色相同的人的年龄加在一起
    print(df[["年龄""发色"]].groupby(by="发色").sum())
    '''
        年龄
    发色   
    棕色  17
    紫红  15
    金色  31
    银白  30
    黑色  31
    '''
     
    # 我想把年龄相同的过滤掉
    # inplace=False,默认不在原表上进行操作,而是返回新的列表。keep="first",表示去重的时候保留第一个,也可以指定为last
    # 按照多个值过滤,组个列表传进去
    print(df.drop_duplicates("年龄"))
    '''
         姓名  年龄      登场作品 性别  发色
    0  古明地觉  15     东方地灵殿  女  紫红
    1  椎名真白  16  樱花庄的宠物女孩  女  金色
    3  春日野穹  14       缘之空  女  银白
    4   古河渚  17   clannad  女  棕色
    '''
     
    # 数据的合并
    # 首先是concat,默认是上下合并,里面接受一个列表,列表可以存放很多个df,默认是axis=0,上下合并
    print(pd.concat([df, df]))
    '''
    0  古明地觉  15     东方地灵殿  女  紫红
    1  椎名真白  16  樱花庄的宠物女孩  女  金色
    2   宫园薰  15   四月是你的谎言  女  金色
    3  春日野穹  14       缘之空  女  银白
    4   古河渚  17   clannad  女  棕色
    5  坂上智代  16   clannad  女  银白
    6  雨宫优子  15      悠久之翼  女  黑色
    7  四方茉莉  16      sola  女  黑色
    '''
    # 左右合并
    print(pd.concat([df, df], axis=1))
    '''
         姓名  年龄      登场作品 性别  发色    姓名  年龄      登场作品 性别  发色
    0  古明地觉  15     东方地灵殿  女  紫红  古明地觉  15     东方地灵殿  女  紫红
    1  椎名真白  16  樱花庄的宠物女孩  女  金色  椎名真白  16  樱花庄的宠物女孩  女  金色
    2   宫园薰  15   四月是你的谎言  女  金色   宫园薰  15   四月是你的谎言  女  金色
    3  春日野穹  14       缘之空  女  银白  春日野穹  14       缘之空  女  银白
    4   古河渚  17   clannad  女  棕色   古河渚  17   clannad  女  棕色
    5  坂上智代  16   clannad  女  银白  坂上智代  16   clannad  女  银白
    6  雨宫优子  15      悠久之翼  女  黑色  雨宫优子  15      悠久之翼  女  黑色
    7  四方茉莉  16      sola  女  黑色  四方茉莉  16      sola  女  黑色
    '''
     
    # 采用merge方式合并
    # merge里面只接收两个df,然后是合并方式,how="left",按照左边的df合并,如果左边的df中没有就丢弃,同理right类似。how="inner",两个df相当于做交集。how="outer",两个df相当于做补集
    # on = "",表示按照哪个字段合并,如果多个字段作为列表传进去
    print(pd.merge(df, df, how="outer", on="姓名"))
    '''
         姓名  年龄_x    登场作品_x 性别_x 发色_x  年龄_y    登场作品_y 性别_y 发色_y
    0  古明地觉    15     东方地灵殿    女   紫红    15     东方地灵殿    女   紫红
    1  椎名真白    16  樱花庄的宠物女孩    女   金色    16  樱花庄的宠物女孩    女   金色
    2   宫园薰    15   四月是你的谎言    女   金色    15   四月是你的谎言    女   金色
    3  春日野穹    14       缘之空    女   银白    14       缘之空    女   银白
    4   古河渚    17   clannad    女   棕色    17   clannad    女   棕色
    5  坂上智代    16   clannad    女   银白    16   clannad    女   银白
    6  雨宫优子    15      悠久之翼    女   黑色    15      悠久之翼    女   黑色
    7  四方茉莉    16      sola    女   黑色    16      sola    女   黑色
    '''

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    '''
    df[pd.isnull(df.title)],选出title为空的所有行
    df[df.title.contains("aaa", na=False)], 选出title包含aaa的所有行,不包括空值
     
        a
    0   10
    1   30
    2   50
    3   70
    4   90
    5   100
     
    labels = ["10到20", "20到40","40到60","60到80", "80到95", "100"]
    bins = [20, 40, 60, 80, 95, 100]
    pd.cut(df.a, bins, right=True, labels=None)
     
    >>>   
        a
    0   (1, 20]
    1   (20, 40]
    2   (40,60]
    3   (60, 80]
    4   (80, 95]
    5   (95, 100]
     
    pd.cut(df.a, bins, right=True, labels=labels)
     
    >>>   
        a
    0   10到20
    1   20到40
    2   40到60
    3   60到80
    4   80到95
    5   100
     
    字符串专程日期格式
    df.to_datetime(df.time, format="")
     
    日期抽取
    df["time"].dt.year
    df["time"].dt.month
    df["time"].dt.day
    df["time"].dt.hour
    df["time"].dt.minute
    df["time"].dt.second
    df["time"].dt.weekday
    '''

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    df = pd.DataFrame({"a": [4,3,4,5],
                       "b": [5,2,7,7],
                       "c": [4,4,8,9]})
     
    print(df.div(100))
    '''
          a     b     c
    0  0.04  0.05  0.04
    1  0.03  0.02  0.04
    2  0.04  0.07  0.08
    3  0.05  0.07  0.09
    '''
    # 表示先对每一行进行求和,让列元素分别去除
    print(df.div(df.sum(axis=1), axis=0))
    # 会发现每一行相加等于一
    '''
              a         b         c
    0  0.307692  0.384615  0.307692
    1  0.333333  0.222222  0.444444
    2  0.210526  0.368421  0.421053
    3  0.238095  0.333333  0.428571
    '''
    # 表示先对每一列进行求和,让行元素分别去除
    # 会发现每一列相加等于一
    print(df.div(df.sum(axis=0), axis=1))
    '''
            a         b     c
    0  0.2500  0.238095  0.16
    1  0.1875  0.095238  0.16
    2  0.2500  0.333333  0.32
    3  0.3125  0.333333  0.36
    '''
    # 查看相关性
    '''
    df["a"].corr(df["b"]), 查看a和b之间的相关性
    df["a", "b", "c"].corr(df["a", "b"]), 查看a,b,c和a,b之间的相关性,a、b和a、b之间肯定高度相关
    df["a", "b", "c"].corr(),corr不加参数默认和前面的df保持一致,即查看a、b、c和a、b、c之间的相关性
    '''

      

    1
    2
    pd.set_option("expand_frame_repr"False)  # 列太多时不换行
    pd.set_option("max_colwidth"8)  # 有的列太长,我们可以进行设置,比如设置最大列宽等于8

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    '''
        alpha
    0   a
    1   b
    2   c
    3   d
    4   e
     
    df["new_alpha"] = df["alpha"].shift(1)
    那么df["new_data"]会在df["alpha"]的基础上上移1位,超出的部分为NaN,里面的可以为任意数字。如果为负数,那么在原来的基础上下移
     
        alpha new_alpha
    0   a     NaN
    1   b     a
    2   c     b
    3   d     c
    4   e     d
    '''

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    '''
        收盘价
    0   10
    1   12
    2   9
    3   11
    4   13
     
    df["涨跌] = df["收盘价"].diff(-1),求本行数据和上行数据相减的结果。为1,则是上行数据和本行数据相减的结果。如果-2,则是本上数据和上两行数据相减的结果
     
        收盘价  涨跌
    0   10      2 -->12-10
    1   12      -3-->9-12
    2   9       2 -->11-9
    3   11      2 -->13-11
    4   13      NaN -->NaN-13
    '''

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    '''
        收盘价
    0   10
    1   12
    2   9
    3   11
    4   13
     
    df["涨跌] = df["收盘价"].pct_change(-1), 类似于diff,但求的是增加或者减少的比例
     
        收盘价  涨跌
    0   10      (12-10)/2
    1   12      (9-12)/12
    2   9       (11-9)/9
    3   11      (13-11)/11
    4   13      NaN
    '''

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    '''
        收盘价
    0   10
    1   12
    2   9
    3   11
    4   13
     
    df["收盘价_cum"] = df["收盘价"].cumsum() ,累加
     
        收盘价  收盘价_cum
    0   10      10
    1   12      12+10
    2   9       9+12+10
    3   11      11+9+12+10
    4   13      13+11+9+12+10
     
    还有cumprod表示累乘
    '''

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    '''
        收盘价
    0   10
    1   12
    2   9
    3   11
    4   13
     
    df["收盘价排序"] = df["收盘价"].rank(ascending=True, pct=False)
     
        收盘价 收盘价排序
    0   10      2 从小到大排名第2
    1   12      4 从小到大排名第4
    2   9       1 从小到大排名第1
    3   11      3 从小到大排名第3
    4   13      5 从小到大排名第5
     
    ascending:升序,为True表示从小到大,为False从大到小
    pct:percent,为False表示排名,为True表示排名的百分比
    '''

      

    1
    2
    3
    4
    5
    6
    '''
    df.dropna(how="any"),只要有空值就删
    df.dropna(how="all"),必须全为空值才删
     
    df.drop(subset=["column1", "column2"], how="all"),其他列不管,只要column1、columns2全为空值就删除这一行。
    '''

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    '''
        收盘价 利润
    0   10     20
    1   12     15
    2   9      NaN
    3   11     13
    4   13     NaN
     
    df["利润"] = df["利润"].fillna(value=10)
        收盘价 利润
    0   10     20
    1   12     15
    2   9      10
    3   11     13
    4   13     10
     
    df["利润"] = df["利润"].fillna(value=df["收盘价"])
        收盘价 利润
    0   10     20
    1   12     15
    2   9      9
    3   11     13
    4   13     13
     
    df["利润"] = df["利润"].fillna(method="ffill"),向上寻找最近的一个非空值进行填充
        收盘价 利润
    0   10     20
    1   12     15
    2   9      15
    3   11     13
    4   13     13
     
    同理method="bfill",表示向下寻找一个最近的非空值进行填充
     
        收盘价 利润
    0   10     20
    1   12     15
    2   9      NaN
    3   11     13
    4   13     NaN
    df.notnull(),判断是不是不空值,不空为True, 空为False
    df.isnull(),判断是不是空值,空为True, 不空为False
     
    df[df["利润"].isnull()]
        收盘价 利润
    2   9      NaN
    4   13     NaN
     
    df[df["利润"].notnull()]
        收盘价 利润
    0   10     20
    1   12     15
    3   11     13
    '''

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    import pandas as pd
     
    df = pd.DataFrame({"a": [01234], "b": [56789]})
    print(df)
    '''
       a  b
    0  0  5
    1  1  6
    2  2  7
    3  3  8
    4  4  9
    '''
    print(df.rolling(3).mean())
    '''
         a    b
    0  NaN  NaN
    1  NaN  NaN
    2  1.0  6.0
    3  2.0  7.0
    4  3.0  8.0
    '''
    print(df.rolling(3, min_periods=1).mean())
    '''
         a    b
    0  0.0  5.0
    1  0.5  5.5
    2  1.0  6.0
    3  2.0  7.0
    4  3.0  8.0
    '''
    print(df.expanding().mean())
    '''
         a    b
    0  0.0  5.0
    1  0.5  5.5
    2  1.0  6.0
    3  1.5  6.5
    4  2.0  7.0
    前n行的平均数
    '''
  • 相关阅读:
    对网络状态监控的两种方法,提示用户联网
    android基于PayPal实现移动在线付款
    android实现拍照,并将图片保存到SD下
    异步下载图片并对对图片进行压缩处理
    微软经典案例系列课程(视频课程讲师:杨丹)
    微软Silverlight开发团队零距离接触系列课程(视频课程讲师:徐鹏阳)
    SaaS软件即服务系列课程(视频课程讲师:吴淏)
    Mobile应用实例分析系列(视频课程讲师:刘彦博)
    模式与实践系列课程(视频课程讲师:张大磊)
    SQL Server 2005 BI综合案例系列课程(视频课程讲师:李苗/金立钢)
  • 原文地址:https://www.cnblogs.com/valorchang/p/11397966.html
Copyright © 2020-2023  润新知