python中的日志转换和索引更改

时间:2016-04-27 21:31:54

标签: python numpy pandas

我正在编写一个用于日志转换的辅助类函数。它需要:

  1. 将日志应用于每个列变量。
  2. 将此新生成的变量命名为“log_variable”。例如,对于变量'InqCnt06',我需要创建一个名为“log_InqCnt06”的新变量。
  3. 对df [variables]列中零或缺失的值执行log(variable_value +1),以避免返回“-inf”。
  4. 查找原始变量的索引。
  5. indexplus添加到原始变量的索引中,并将其设为“log_variable”的索引。
  6. 如何log(variable_value +1)丢失或零值?我使用isnull()找到了值,我可以以某种方式使用where.isnull()函数吗?

    我也很难将原始变量索引添加到indexplus,并将其分配给log_variable的索引。

    这是我的代码:

    def add_log_transform(df, variable, indexplus = 1):
            print df[variable].isnull()
            log_variable = (np.log(df[variable]))
    def main():
        variables_needs_tranform = ['DerogCnt', 'CollectCnt', 'InqCnt06', 'InqTimeLast', 'InqFinanceCnt24', 'TLTimeFirst', 'TLTimeLast', 'TLCnt03', 'TLCnt12', 'TLCnt24', 'TLCnt', 'TLSum', 'TLMaxSum', 'TLDel60Cnt', 'TLBadCnt24', 'TL75UtilCnt', 'TL50UtilCnt', 'TLBalHCPct', 'TLSatPct', 'TLDel3060Cnt24', 'TLDel90Cnt24', 'TLDel60CntAll', 'TLBadDerogCnt', 'TLDel60Cnt24', 'TLOpen24Pct']
    util.add_log_transform(df, variables_needs_tranform, indexplus = 1)
    
    if __name__ == "__main__":
            main()
    

    这是我的df样本。

        DerogCnt  CollectCnt  InqCnt06  InqTimeLast  InqFinanceCnt24  TLTimeFirst  \
    0          1           1         7            1                4          125   
    1          1           1         2            1                0          252   
    2          0           0         1            1                4          254   
    3          0           0         6            3                6          154   
    4          0           0         1            0                1          311   
    5          1           1         1            1                2          200   
    6          2           0         3            1                2          137   
    7          0           0         3            2                1          267   
    8          0           0         0           16                3          359   
    9          1           1         1            6                3          141   
    10         0           0         1            4                1          487   
    11         0           0         4            1                4           78   
    12         3           3         4            0                5          117   
    13         2           2         1            0                4          101   
    14         1           1         2            1                8          260   
    15         0           0         5            1                6          295   
    16         0           0         0          NaN                0          223   
    17        15           9         3            1                3           14   
    18         0           0         3            2                7          345   
    19         0           0         4            4                5          145   
    20         0           0         3            1                3          222   
    21         0           0         1            5                1          354   
    22         8           8         0            8                2          111   
    23         0           0         1            1                3           56   
    24         8           5         6            1               10           16   
    
    TLTimeLast  TLCnt03  TLCnt12  TLCnt24     ...       TL75UtilCnt  \
    
    0            3        1        3        5     ...                 3   
    1           18        0        0        2     ...                 1   
    2           12        0        1        2     ...                 3   
    3            3        1        9       11     ...                 4   
    4           17        0        0        1     ...                 2   
    5            7        0        1        2     ...                 1   
    6           12        0        1        2     ...                 2   
    7            2        3        6        8     ...                 1   
    8           23        0        0        1     ...                 0   
    9            8        0        1        4     ...                 7   
    10          12        0        1        6     ...                 9   
    11           4        0        7       10     ...                 1   
    12          27        0        0        0     ...                 3   
    13          12        0        1        1     ...                 3   
    14          16        0        0        2     ...                 2   
    15           8        0        4       11     ...                 9   
    16          18        0        0        1     ...                 2   
    17          14        0        0        1     ...                 1   
    18           2        2        2        4     ...                 3   
    19           3        1        2        2     ...                 2   
    20          22        0        0        1     ...                 1   
    21           7        0        2       10     ...                 4   
    22          24        0        0        1     ...                 0   
    23          40        0        0        0     ...                 0   
    24           4        0        2        4     ...                 2   
    
    TL50UtilCnt  TLBalHCPct  TLSatPct  TLDel3060Cnt24  TLDel90Cnt24  \
    0             4        0.85      0.67               0             0   
    1             2        0.48      0.30               0             1   
    2             3        0.84      0.67               0             1   
    3             5        0.73      0.76               0             1   
    4             3        0.88      0.63               0             0   
    5             1        0.13      0.25               1             1   
    6             2        0.70      0.64               0             0   
    7             1        0.47      0.42               0             1   
    8             2        0.41      0.69               0             0   
    9             7        0.84      0.67               0             0   
    10           10        0.77      0.82               0             0   
    11            2        0.79      0.74               0             0   
    12            3        0.92      0.21               2             3   
    13            4        0.90      0.22               3             0   
    14            3        0.80      0.35               0             1   
    15           12        0.47      0.73               0             0   
    16            4        0.89      0.57               3             0   
    17            1        0.80      0.00               0             0   
    18            3        0.86      0.52               0             0   
    19            3        0.59      0.41               0             2   
    20            2        0.25      0.62               2             0   
    21            5        0.36      0.65               0             1   
    22            0        0.38      0.40               0             0   
    23            0        0.28      0.20               3             1   
    24            3        0.91      0.25               1             1   
    
    TLDel60CntAll  TLBadDerogCnt  TLDel60Cnt24  TLOpen24Pct  
    
    0               1              0             0         0.71  
    1               4              2             1         0.50  
    2               1              1             1         0.33  
    3               1              1             1         1.22  
    4               1              0             0         0.20  
    5               3              1             1         0.67  
    6               0              2             0         0.40  
    7               2              1             1         2.00  
    8               2              0             0         0.17  
    9               0              1             0         0.44  
    10              0              0             0         0.46  
    11              0              0             0         1.67  
    12              7              4             4         0.00  
    13              4              1             2         0.17  
    14              1              1             1         0.67  
    15              0              0             0         0.28  
    16              5              0             2         0.17  
    17              0             12             0         1.00  
    18              0              0             0         0.67  
    19              7              2             2         0.25  
    20              3              0             1         0.10  
    21              1              1             1         0.53  
    22              0              4             0         0.50  
    23              4              1             3         0.00  
    24              1              7             1         1.33  
    

1 个答案:

答案 0 :(得分:2)

让我回答你问题的简化版本:

# example dataframe
df = pd.DataFrame({'a': [0, 1, 2, 3], 
                   'b': [4, 5, np.nan, 7], 
                   'c': [8, 9, 10, 11]})

# apply log(x+1) element-wise to a subset of columns
to_log = ['a', 'b']
df_log = df[to_log].applymap(lambda x: np.log(x+1))

# rename columns
df_log.columns = 'log_' + df_log.columns

# shift the index
df_log.index = df_log.index + 1

如果您想要对缺失值进行特殊处理,您可以这样做:

df_log[df_log.isnull()] = -1

现在可以将所有这些放在辅助函数中。