Wanted: функция для удаления пробелов из заголовков столбцов, устойчивых к заголовкам столбцов, не являющимся строками - PullRequest
0 голосов
/ 28 ноября 2018

Я получаю свои данные в pandas dataframes и обычно очищаю заголовки столбцов с помощью

df.columns = df.columns.str.strip()

Однако недавно я столкнулся с dataframe, который имел целочисленные имена столбцов типа, а не строки.Когда я пытался сделать .str.strip (), он выдавал ошибку.

Как бы я написал некоторый код Python, который удаляет пробелы из имен столбцов , если они являются строками .

Я новичок в Python, поэтому, чем больше рука держит, тем лучше.

Спасибо

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Самый безопасный вариант - преобразовать все имена столбцов в строки (поэтому df[0] -> df['0']) перед тем, как сделать это:

df.rename(columns={c: str(c).strip() for c in df.columns}, inplace=True)

При использовании итераций по столбцу используется словарное пониманиеимена df.columns, а затем создайте отображение из исходного имени столбца c в строковую версию str(c).Затем он использует собственный .strip() строковый метод.Вы выполняете его как однострочник, используя inplace=True.

Ближе к цели исходного вопроса:

df.columns = [col.strip() if isinstance(col, str) else col for col in df.columns]

... но я бы предложил не использовать это,Так как числовые имена столбцов могут сбивать с толку (например, если столбец 5 находится в позиции 3).С именем строки ясно, что это не позиционное значение.

0 голосов
/ 28 ноября 2018

Вы можете использовать понимание списка, что довольно необычно при работе с Pandas, так как обычно более эффективно применять встроенные функции Pandas (как вы уже сделали).Но для такой простой вещи, как исправление имен столбцов, все должно быть в порядке:

df = pd.DataFrame(columns=[1, 2, 'A '])
df.columns = [col.strip() if isinstance(col, str) else col for col in df.columns]

Результаты:

In [75]: df.columns
Out[75]: Index([1, 2, 'A'], dtype='object')
...