Удалить '.'из тысячи глав колонок [питон] - PullRequest
0 голосов
/ 13 мая 2018

Мой DataFrame имеет около 9K столбцов, и я хочу удалить . из каждого имени столбца, см. Примеры имен столбцов ниже:

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

Это всего три, у меня 9K столбцов, у некоторых нет ., но у многих есть. Как я могу их эффективно удалить, так как функция rename слишком ручная.

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Вы можете использовать понимание списка на 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
0 голосов
/ 13 мая 2018

Вы можете использовать str.replace:

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

или list comprehension с replace:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...