сделать верхний регистр и заменить пробел в столбце данных - PullRequest
0 голосов
/ 18 мая 2018

для определенного столбца кадра данных pandas Я хотел бы сделать элементы заглавными и заменить пробелы

import pandas as pd

df = pd.DataFrame(data=[['AA 123',00],[99,10],['bb 12',10]],columns=['A','B'],index=[0,1,2])

# find elements 'A' that are string
temp1 = [isinstance(s, str) for s in df['A'].values]

# Make upper case and replace any space
temp2 = df['A'][temp1].str.upper()
temp2 = temp2.str.replace(r'\s', '')

# replace in dataframe
df['A'].loc[temp2.index] = temp2.values

Я получаю

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexing.py:194: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  self._setitem_with_indexer(indexer, value)

Любое предложение, чтобы избежать этого предупрежденияили какой-нибудь лучший способ сделать то, что я пытаюсь сделать?

Ответы [ 3 ]

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

Вы можете значительно упростить это, используя numpy.where для выбора строк, которые вы хотите изменить:

import pandas as pd
import numpy as np

    df = pd.DataFrame(data=[['AA 123',00],[99,10],['bb 12',10]],columns=['A','B'],index=[0,1,2])


    df['A'] = np.where(df['A'].apply(lambda x: isinstance(x, str)),
                       df['A'].str.upper().str.replace(r'\s', ''),
                       df['A'])
0 голосов
/ 18 мая 2018

str.upper с replace

df['A'] = df.A.str.upper().replace('\s+', '', regex=True).fillna(df['A'])

       A   B
0  AA123   0
1     99  10
2   BB12  10
0 голосов
/ 18 мая 2018

Вы можете заменить свою последнюю строку на

df.loc[temp2.index, 'A'] = temp2.values
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...