pandas - 如何仅选择偶数标题的特定列?
问题描述
我想问一个关于如何调用仅包含偶数的特定列的问题。
关于我以前的问题:如何使所有行数据删除相似数据并乘以浮点数。
df2 =df['hlogUs_dB'].str.split('[,:]',expand = True)
df2 = data.drop(["0"])
df2
0 1 2 3 4 5 6 7 8 9 ... 276 277 278 279 280 281 282 283 284 285
0 109 -3.4 110 -3.4 111 -3.4 112 -3.5 113 -3.5 ... 343 -4.3 344 -4.3 345 -4.2 346 -4.2 347 -4.2
1 109 -3.5 110 -3.5 111 -3.4 112 -3.4 113 -3.4 ... 343 -4.1 344 -4.2 345 -4.4 346 -4.4 347 -4.2
2 109 -3.7 110 -3.7 111 -3.8 112 -3.8 113 -3.8 ... 343 -4.2 344 -4.3 345 -4.3 346 -4.3 347 -4.3
3 109 -3.5 110 -3.6 111 -3.6 112 -3.6 113 -3.7 ... 343 -4.1 344 -4.1 345 -4.1 346 -4.1 347 -4.1
4 109 -3.7 110 -3.8 111 -3.8 112 -3.8 113 -3.8 ... 343 -4.2 344 -4.2 345 -4.2 346 -4.2 347 -4.3
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
165 109 -5.2 110 -5.3 111 -5.5 112 -5.7 113 -5.9 ... 343 -5.4 344 -5.3 345 -5.2 346 -5.1 347 -5.1
166 109 -5.5 110 -5.6 111 -5.8 112 -6.1 113 -6.3 ... 343 -5.5 344 -5.4 345 -5.3 346 -5.2 347 -5.2
167 109 -6.0 110 -6.2 111 -6.4 112 -6.7 113 -7.1 ... 343 -4.9 344 -4.9 345 -4.9 346 -4.9 347 -4.9
168 109 -5.4 110 -5.5 111 -5.7 112 -5.9 113 -6.2 ... 343 -5.9 344 -5.7 345 -5.7 346 -5.6 347 -5.6
169 109 -5.9 110 -6.1 111 -6.4 112 -6.6 113 -7.0 ... 343 -5.7 344 -5.7 345 -5.7 346 -5.6 347 -5.6
170 rows × 286 columns
我的问题是如何在不使用手动输入所有偶数列头的方式的情况下调用偶数。
如:
df2[[0,2,4]]*= 2
我目前坚持以标题列为条件的想法。我只想叫偶数。我希望在这些问题上找到合适的解决方案。先感谢您。
解决方案
我们可以根据模数 2 为 0(偶数)的所有列来选择:
even_cols = df.columns[(df.columns % 2) == 0]
even_cols
:
Int64Index([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18,
...
266, 268, 270, 272, 274, 276, 278, 280, 282, 284],
dtype='int64', length=143)
然后操作可以使用新创建的索引:
df[even_cols] *= 2
df
:
0 1 2 3 4 5 6 ... 279 280 281 282 283 284 285
0 198 78 122 16 146 8 124 ... 8 102 61 168 52 148 25
1 18 31 78 59 44 80 116 ... 75 124 51 4 96 38 7
2 152 66 112 0 114 31 172 ... 18 186 19 84 29 36 0
3 80 99 152 25 34 31 106 ... 59 190 33 68 31 66 83
4 192 95 48 95 130 14 8 ... 6 74 79 40 46 198 65
.. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
165 170 58 110 75 196 11 50 ... 54 46 53 146 62 30 48
166 54 8 148 25 174 40 114 ... 6 180 32 94 44 142 16
167 42 48 48 31 126 60 86 ... 11 128 10 162 67 142 13
168 54 37 70 2 128 38 134 ... 85 166 40 142 57 54 52
169 164 41 146 40 64 44 28 ... 83 90 86 188 23 38 35
如果我们需要每隔一列而不是基于数值的列,我们可以设置切片步骤以创建列列表:
every_other_column = df.columns[::2]
df[every_other_column] *= 2
或者只是修改 DataFrame 而不创建列列表:
df.loc[:, ::2] *= 2
示例数据框:
import numpy as np
import pandas as pd
np.random.seed(5)
df = pd.DataFrame(np.random.randint(0, 100, (170, 286)))
print(df)
df
:
0 1 2 3 4 5 6 ... 279 280 281 282 283 284 285
0 99 78 61 16 73 8 62 ... 8 51 61 84 52 74 25
1 9 31 39 59 22 80 58 ... 75 62 51 2 96 19 7
2 76 66 56 0 57 31 86 ... 18 93 19 42 29 18 0
3 40 99 76 25 17 31 53 ... 59 95 33 34 31 33 83
4 96 95 24 95 65 14 4 ... 6 37 79 20 46 99 65
.. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
165 85 58 55 75 98 11 25 ... 54 23 53 73 62 15 48
166 27 8 74 25 87 40 57 ... 6 90 32 47 44 71 16
167 21 48 24 31 63 60 43 ... 11 64 10 81 67 71 13
168 27 37 35 2 64 38 67 ... 85 83 40 71 57 27 52
169 82 41 73 40 32 44 14 ... 83 45 86 94 23 19 35
推荐阅读
- django - 如何过滤 django 中的模型字段?
- bash - 无法通过 bash 脚本向 kubernetes 中的 postgres pod 发出长 sql 查询
- python - 在 Python 3 中打印换页符
- r - 为什么 R 系统无法执行 hdfs 命令?
- html - 限制 html 中的十进制数字以及放置脚本的位置
- javascript - javascript onclick 按钮颜色和点击次数
- video - ffmepg 视频编码出现“无效平面数据大小”错误
- spring - 在 Wildfly 14 上部署我的应用程序时使用名称创建 bean Spring 时出错
- json - json-ld 上下文中的@id 和@type 是什么意思?
- opencv - 在“__init__.py”中找不到引用“ximgproc”