对Python中的多个变量应用日志转换的函数

时间:2018-09-19 12:50:38

标签: python python-3.x dataframe logarithm

我正在尝试使用此功能将日志转换应用于Python中数据框中的多列。

def log(x):
       if type(x) is float64 or int64:
              apply(np.log(x+1))
       else:
              return x

df2.apply(log)

我遇到以下错误:

NameError: ("name 'float64' is not defined", 'occurred at index CUSTID')

CUSTID是DataFrame中的第一类别

2 个答案:

答案 0 :(得分:0)

NameError可能是由于导入错误引起的。如果有

import numpy as np

您需要将数据类型称为np.float64np.int64。否则,您的导入应为

from numpy import float64, int64

此外,更常见的写作方式

if isinstance(x, np.float64) or isinstance(x, np.int64)

或(等效但简单)

if isinstance(x, (np.float64, np.int64))

它也适用于子类(尽管我怀疑这种情况是否会有所不同)

答案 1 :(得分:0)

我认为这可以完成工作

<p:inputText value="#{collateral.coldate2}" id="colexpdate1"
                             onchange="changeEVENT();" styleClass="calenderType" 
                            disabled="#{collateral.disableCollateral}"  readonly="false" onfocus="toggleCalender(this,'colexpdate1','hij_colexpdate1')">
                            <f:convertDateTime pattern="dd/MM/yyyy"/>
                        </p:inputText>
                        <p:selectBooleanCheckbox style="vertical-align:middle;" value="false" id="t_colexpdate1" disabled="#{collateral.disableCollateral}"  
                        onchange="toggleCalender(this,'colexpdate1','hij_colexpdate1')"  widgetVar="hij_colexpdate1"  />

示例代码:     将熊猫作为pd导入     将numpy导入为np

for c in [c for c in df.columns if np.issubdtype(df[c].dtype , np.number)]:
    df[c] = np.log(df[c])

输出:

df = pd.DataFrame(
[
[2, 4, "A"],
[4, 5, "C"],
[5, 4, "B"],

[10, 4.2, "A"],
[9, 3, "B"],
[3, 3, "C"]
], columns=['data1', 'data2', 'Categories'])

for c in [c for c in df.columns if np.issubdtype(df[c].dtype , np.number)]:
    df[c] = np.log(df[c])