pandas:如何将数据框的所有数字列转换为对数

mau*_*bio 8 python pandas

在 RI 中,可以对数据框的所有数字列应用对数(或平方根等)变换,方法是:

logdf <- log10(df)
Run Code Online (Sandbox Code Playgroud)

Python/Pandas 中是否有等价的东西?我看到有一个“转换”和一个(类似 R 的)“应用”函数,但在这种情况下无法弄清楚如何使用它们。

感谢您的任何提示或建议。

Rex*_*Low 11

假设您有一个名为的数据框 df

您可以先列出可能的数字类型,然后进行循环

numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']
for c in [c for c in df.columns if df[c].dtype in numerics]:
    df[c] = np.log10(df[c])
Run Code Online (Sandbox Code Playgroud)

或者,使用 lambda 运算符和np.dtype.kind的单行解决方案

numeric_df = df.apply(lambda x: np.log10(x) if np.issubdtype(x.dtype, np.number) else x)
Run Code Online (Sandbox Code Playgroud)

  • @RexLow 是的。我只是回应OP的评论,因为他建议他不需要类型检查。 (2认同)

Gra*_*her 7

如果大多数列都是数字,则仅使用它可能有意义try,如果不起作用则跳过该列:

for column in df.columns:
    try:
        df[column] = np.log10(df[column])
    except (ValueError, AttributeError):
        pass
Run Code Online (Sandbox Code Playgroud)

当然,如果您愿意,可以将其包装在函数中。

如果所有列都是数字,您甚至可以简单地执行以下操作

df_log10 = np.log10(df)
Run Code Online (Sandbox Code Playgroud)