我正在尝试使用此功能将日志转换应用于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中的第一类别
答案 0 :(得分:0)
NameError
可能是由于导入错误引起的。如果有
import numpy as np
您需要将数据类型称为np.float64
和np.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])