【发布时间】:2021-11-18 17:35:28
【问题描述】:
我有一个带有列的数据框,比如 v1~v4
| _NAME | _TIMESTAMP | v0 | v1 | v2 | v3 | v4 |
|----------|---------------------|-------|------|-------|-------|-------|
| BRAKE_LH | 17-11-2021 22:50:43 | 13896 | 8262 | 12339 | 13110 | 13107 |
| BRAKE_LH | 17-11-2021 22:51:34 | 13896 | 8262 | 12339 | 13110 | 13107 |
| BRAKE_LH | 17-11-2021 22:51:35 | 13896 | 8262 | 12339 | 13110 | 13107 |
| BRAKE_LH | 17-11-2021 22:51:36 | 13896 | 8262 | 12339 | 13110 | 13107 |
| BRAKE_LH | 17-11-2021 22:51:37 | 0 | 0 | 0 | 0 | 0 |
如果我想对列 v1~v4 执行以下功能
df['v0'] = df['v0'].apply(lambda x: chr(round(x / 256)) + chr(x % 256)).apply(lambda x: x[::-1])
df['v1'] = df['v1'].apply(lambda x: chr(round(x / 256)) + chr(x % 256)).apply(lambda x: x[::-1])
df['v2'] = df['v2'].apply(lambda x: chr(round(x / 256)) + chr(x % 256)).apply(lambda x: x[::-1])
df['v3'] = df['v3'].apply(lambda x: chr(round(x / 256)) + chr(x % 256)).apply(lambda x: x[::-1])
df['v4'] = df['v4'].apply(lambda x: chr(round(x / 256)) + chr(x % 256)).apply(lambda x: x[::-1])
在某些情况下,列会超过 4 列,例如 40 或 100 列
有没有一种简单的方法可以将它应用于所有列,除了--> _NAME & _TIMESTAMP 列
【问题讨论】:
-
以代码形式提供您的输入数据。
-
@hpchavaz:修改
-
你可以这样做:for col in df.columns: df[col] = df[col].apply( ...) 提示:如果你定义一个函数并调用它会更干净你的 lambda 表达式
-
附带说明:看到您的公式有一部分是除以 256,另一部分是使用 % 来除以其余部分。这最常用于使用整数除法的第一部分,即
chr(x // 256),而不是舍入x / 256的结果。看看这是否适用于您的用例。舍入的问题是,当除法结果的小数部分 >= 0.5 时,你会得到一个更大的值。如果你还把余数和这个舍入的值一起取,那就没有意义了。