从数千列标题中删除“.”[python]

2024-06-08 02:02:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据帧大约有9K列,我想从每个列名中删除.,请参见下面的列名示例:

`traffic.seas1`
`traffic.seas2`
`traffic.seas3`

这只是三个,我有9K列,有些没有.,但很多有。如何有效地删除它们,因为rename函数太手工了


Tags: 数据函数示例手工renametrafficseas1seas3
2条回答

您可以使用^{}

df.columns = df.columns.str.replace('.','')

list comprehensionreplace

df.columns = [x.replace('.','') for x in df.columns]

样本

df = pd.DataFrame({'traffic.seas1':list('abcdef'),
                   'traffic.seas2':[4,5,4,5,5,4],
                   'traffic.seas3':[7,8,9,4,2,3],
                   'D':[1,3,5,7,1,0],
                   'E':[5,3,6,9,2,4],
                   'F':list('aaabbb')})

print (df)
   D  E  F traffic.seas1  traffic.seas2  traffic.seas3
0  1  5  a             a              4              7
1  3  3  a             b              5              8
2  5  6  a             c              4              9
3  7  9  b             d              5              4
4  1  2  b             e              5              2
5  0  4  b             f              4              3

df.columns = df.columns.str.replace('.','')
print (df)
   D  E  F trafficseas1  trafficseas2  trafficseas3
0  1  5  a            a             4             7
1  3  3  a            b             5             8
2  5  6  a            c             4             9
3  7  9  b            d             5             4
4  1  2  b            e             5             2
5  0  4  b            f             4             3

时间安排:

N = 9000
df = pd.DataFrame(np.random.randint(10, size=(3, N))).add_prefix('traffic.seas')
print (df)

In [161]: %timeit df.columns = df.columns.str.replace('.','')
4.4 ms ± 267 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [162]: %timeit df.columns = [x.replace('.','') for x in df.columns]
2.53 ms ± 177 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

您可以在df.columns上使用列表理解,如下所示:

df.columns = [c.replace('.', '') for c in df.columns]

例如:

df = pd.DataFrame({'foo': [1], 'bar.z': [2]})
>>> df.columns
Index(['bar.z', 'foo'], dtype='object')

df.columns = [c.replace('.', '') for c in df.columns]
>>> df
    barz    foo
0   2   1

相关问题 更多 >

    热门问题