问题描述
我有下表作为输入:
输入
Column1.ab.gz | Column2.ab.gz | Column3.ab.gz | Column4.ab.gz | Column5.ab.gz | Column6.ab.gz |
---|---|---|---|---|---|
1234 | 0 | 22 | 33 | 5 | 7 |
1235 | 1 | 2 | 2 | 0 | 234 |
1236 | 9 | 2 | 82 | 0 | 66 |
1237 | 0 | 0 | 0 | 0 | 0 |
1238 | 7 | 11 | 6 | 66 | 1 |
1239 | 5 | 27 | 5 | 0 | 8 |
1240 | 0 | 0 | 0 | 0 | 0 |
1241 | 15 | 0 | 2 | 13 | 5 |
我想自动重命名不带 'ab.gz' 的列名,而不是手动重命名列 (data.rename(columns = 'Column1.ab.gz' :'Column1','Column2.ab.gz' :'Column2','Column3.ab.gz' :'Column3','Column4.ab.gz' :'Column4','Column5.ab.gz' :'Column5','Column6.ab.gz' :'Column6')
),因为原始表包含 50 列。
我还想删除所有列值为 0 的行。
输出应如下所示:
Column1 | 第2列 | 第3列 | 第4列 | 第5列 | 第 6 列 |
---|---|---|---|---|---|
1234 | 0 | 22 | 33 | 5 | 7 |
1235 | 1 | 2 | 2 | 0 | 234 |
1236 | 9 | 2 | 82 | 0 | 66 |
1238 | 7 | 11 | 6 | 66 | 1 |
1239 | 5 | 27 | 5 | 0 | 8 |
1241 | 15 | 0 | 2 | 13 | 5 |
我如何在 python 中做到这一点?
提前致谢!
解决方法
通过空字符串使用 str.replace
:
df.columns = df.columns.str.replace('.ab.gz','')
print (df)
Column1 Column2 Column3 Column4 Column5 Column6
0 aa 0 22 33 5 7
1 bb 1 2 2 0 234
2 cc 9 2 82 0 66
3 ee 0 0 0 0 0
4 ff 7 11 6 66 1
5 dd 5 27 5 0 8
6 aa 0 0 0 0 0
7 bb 15 0 2 13 5
如果需要在第一个 .
之前的值:
df.columns = df.columns.str.split('.').str[0]
,
您可以像这样使用 list comprehension
:
df.columns=[i.replace('.ab.gz','') for i in df.columns]