Как изменить цифры в ячейке на слово «Автобус» в Pandas Python - PullRequest
3 голосов
/ 13 мая 2019

У меня есть фрейм данных, который содержит и цифры, и текст в одном столбце, каждый из которых относится к типу объекта.Как преобразовать только числа в ячейке в int, пока текст остается объектом?

Я пытался использовать pandas function >> pd.to_numeric(df, errors='ignore'), но только столбцы без текста преобразуются в плавающие.остальное остается в виде объекта

27      72      27      72      None    None    None    None    
34      34  None    None    None    None    None    None    
MRT     MRT     None    None    None    None    None    None    
MRT     MRT     None    None    None    None    None    None    
MRT     MRT     None    None    None    None    None    None    
121     195     121     195     None    None    None    None    
175     147     147     175     None    None    None    None     
33      33      None    None    None    None    None    None    





Bus     Bus     Bus     Bus     None    None    None    None    
Bus     Bus     None    None    None    None    None    None    
MRT     MRT     None    None    None    None    None    None    
MRT     MRT     None    None    None    None    None    None    
MRT     MRT     None    None    None    None    None    None    
Bus     Bus     Bus     Bus     None    None    None    None    
Bus     Bus     Bus     Bus     None    None    None    None    
Bus     Bus     None    None    None    None    None    None

Ответы [ 3 ]

2 голосов
/ 13 мая 2019

Если ваши реальные данные выглядят так, то есть не содержат строк типа 12.3, вы можете попробовать преобразовать их в to_numeric и заполнить non-na с помощью 'Bus'

df[df.apply(pd.to_numeric, 
            args={'errors':'ignore'})
     .notnull()] = 'Bus'

Тестовые данные:

df = pd.DataFrame({'a':[12, 'None', None],
                   'b':[23, 'MRT', None]})

дает:

    a       b
0   Bus     Bus
1   None    MRT
2   None    None
2 голосов
/ 13 мая 2019

IIUC с использованием to_numeric с mask

yourdf=df.mask(df.apply(pd.to_numeric,errors='coerce',axis=1).notnull(),'BUS')
yourdf
Out[631]: 
    27   72  27.1  72.1  None None.1 None.2 None.3
0  BUS  BUS  None  None  None   None   None   None
1  MRT  MRT  None  None  None   None   None   None
2  MRT  MRT  None  None  None   None   None   None
3  MRT  MRT  None  None  None   None   None   None
4  BUS  BUS   BUS   BUS  None   None   None   None
5  BUS  BUS   BUS   BUS  None   None   None   None
6  BUS  BUS  None  None  None   None   None   None
0 голосов
/ 13 мая 2019

В датафрейме вы можете использовать replace ()

dataframe.replace(old_value, new_value)

как это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...