У меня есть некоторый код для удаления пробелов из значений индекса информационного кадра, если это строка:
df.index = df.index.map(lambda x: s.strip() if type(x) is str else x)
Кажется, это хорошо работает для данных с одним индексом.К сожалению, для мультииндексных фреймов данных это удаление имен индексов и замена их на level_0, level_1 и т. Д.
df.index.names
FrozenList('Stag','Seq.','Block')
df.index = df.index.map(lambda x: s.strip() if type(x) is str else x)
df.index.names
FrozenList('level_0','level_1','level_2')
У меня есть обходной путь ниже, но предположим, что есть лучший / правильный способ.
indexNames = list(df.index.names) # take a copy of the index names
indexNames
FrozenList('Stag','Seq.','Block')
df.index = df.index.map(lambda x: s.strip() if type(x) is str else x)
df.index.names = indexNames # reset the index names
df.index.names
FrozenList('level_0','level_1','level_2')
Я хотел бы знать
- , что происходит с моими исходными именами
- Каков наилучший способ удалить пробелы из значений индекса строки, которыесохраняет исходные имена индексов.
Я новичок в python, поэтому, чем больше рука держит, тем лучше.Спасибо
РЕДАКТИРОВАТЬ, ЧТОБЫ ПОСТАВИТЬ КОД ОБРАЗЦА С ИСПОЛЬЗОВАНИЕМ КОММЕНТАРИЙ, ПРЕДЛАГАЕМЫМ ИЗМЕНЕНИЕМ В ПАРТИИ
Ниже приведен пример кода:
import pandas as pd
import numpy as np
# Make a dataframe
iterables = [['bar', 'baz ', 'foo ', 'qux'], ['one', 'two']] #baz and foo have whitespace
myIndex = pd.MultiIndex.from_product(iterables, names=['Stag', 'Seq'])
df = pd.Series(np.random.randn(8), index=myIndex)
# Try and strip whitespace from the index values
df.index = df.index.map(lambda x: tuple(xx.strip() if type(xx) is str else xx for xx in x))
# Now look at the index names
df.index.names
FrozenList('None','None')