将列值转换为 ascii
Converting column value to ascii
我有一个包含列的数据框,比如 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 列
您可以将要忽略的列放在 set
、IGNORELIST = {'_NAME', '_TIMESTAMP'}
.
中
然后遍历列名称并检查名称是否被忽略。如果不是,请应用您的函数。
这是一个例子
# df = ..your dataframe..
IGNORELIST = {'colname1', 'colname2'}
for colname in df.columns:
if not colname in IGNORELIST:
df[colname] = df[colname].apply(lambda x: chr(round(x / 256)) + chr(x % 256)).apply(lambda x: x[::-1])
您可以通过.set_index()
. Then use .applymap()
to use your formulas for processing elementwise on each column. Finally, restore the columns _NAME
and _TIMESTAMP
to data columns by .reset_index()
将列_NAME
和_TIMESTAMP
设置为索引(排除它们进行处理),如下:
df.set_index(['_NAME', '_TIMESTAMP']).applymap(lambda x: chr(round(x / 256)) + chr(x % 256)).applymap(lambda x: x[::-1]).reset_index()
结果:
_NAME _TIMESTAMP v0 v1 v2 v3 v4
0 BRAKE_LH 17-11-2021 22:50:43 H6 F 30 63 33
1 BRAKE_LH 17-11-2021 22:51:34 H6 F 30 63 33
2 BRAKE_LH 17-11-2021 22:51:35 H6 F 30 63 33
3 BRAKE_LH 17-11-2021 22:51:36 H6 F 30 63 33
4 BRAKE_LH 17-11-2021 22:51:37
我有一个包含列的数据框,比如 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 列
您可以将要忽略的列放在 set
、IGNORELIST = {'_NAME', '_TIMESTAMP'}
.
然后遍历列名称并检查名称是否被忽略。如果不是,请应用您的函数。
这是一个例子
# df = ..your dataframe..
IGNORELIST = {'colname1', 'colname2'}
for colname in df.columns:
if not colname in IGNORELIST:
df[colname] = df[colname].apply(lambda x: chr(round(x / 256)) + chr(x % 256)).apply(lambda x: x[::-1])
您可以通过.set_index()
. Then use .applymap()
to use your formulas for processing elementwise on each column. Finally, restore the columns _NAME
and _TIMESTAMP
to data columns by .reset_index()
将列_NAME
和_TIMESTAMP
设置为索引(排除它们进行处理),如下:
df.set_index(['_NAME', '_TIMESTAMP']).applymap(lambda x: chr(round(x / 256)) + chr(x % 256)).applymap(lambda x: x[::-1]).reset_index()
结果:
_NAME _TIMESTAMP v0 v1 v2 v3 v4
0 BRAKE_LH 17-11-2021 22:50:43 H6 F 30 63 33
1 BRAKE_LH 17-11-2021 22:51:34 H6 F 30 63 33
2 BRAKE_LH 17-11-2021 22:51:35 H6 F 30 63 33
3 BRAKE_LH 17-11-2021 22:51:36 H6 F 30 63 33
4 BRAKE_LH 17-11-2021 22:51:37