重命名 Pandas Dataframe 中的列名

问题描述

我有下表作为输入:

输入

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]