首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列值转换为ascii

将列值转换为ascii
EN

Stack Overflow用户
提问于 2021-11-18 17:35:28
回答 2查看 110关注 0票数 1

我有一个列的数据框架,比如v1~v4

代码语言:javascript
复制
| _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列执行以下函数

代码语言:javascript
复制
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列之外,是否有一种简单的方法将其应用于所有列?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-18 19:07:59

您可以将列_NAME_TIMESTAMP设置为.set_index()索引(以排除它们以供处理)。然后使用.applymap()在每一列上使用您的处理元素的公式。最后,通过_NAME_TIMESTAMP将列.reset_index()还原为数据列,如下所示:

代码语言:javascript
复制
df.set_index(['_NAME', '_TIMESTAMP']).applymap(lambda x: chr(round(x / 256)) + chr(x % 256)).applymap(lambda x: x[::-1]).reset_index()

结果:

代码语言:javascript
复制
      _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  
票数 2
EN

Stack Overflow用户

发布于 2021-11-18 17:52:03

您可以将要忽略的列放在setIGNORELIST = {'_NAME', '_TIMESTAMP'}中。

然后遍历列名并检查名称是否被忽略。如果不是,应用你的功能。

下面是一个例子

代码语言:javascript
复制
# 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])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70024311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档