Удалите числа в строковом столбце, хранящемся как объект, и преобразуйте в строку Python-панд - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть переменная, хранящаяся как объект в кадре данных, который представляет собой строковое поле, которое также содержит числа для некоторых строк:

ID  Var1
1   abcd
2   eftg
3   -1234-
4   zxct

Как я могу отбросить числа для идентификатора 3 и заменить их другими буквамиили оставить пустым?Требуемый вывод:

ID  Var1
1   abcd
2   eftg
3   
4   zxct

или

ID  Var1
1   abcd
2   eftg
3   aaaa
4   zxct

Я пытался сохранить Var1 в виде строки с:

df['Var1'] = df['Var1'].astype(str)

Но это не работает, что мне не хватает?

Большое спасибо за вашу помощь

1 Ответ

0 голосов
/ 11 апреля 2019

Вы можете использовать понимание списка, чтобы проверить тип каждой записи в столбце и заменить не-строки. Для замены строк, состоящих только из цифровых символов, я рекомендую Series.str.isnumeric ().

import pandas as pd

# replace everything but strings with empty strings
df =pd.DataFrame({'Var1':['aa', 'bb', 12, 'cc']}, index=[1,2,3,4]) # create dataframe
is_no_string = [not isinstance(val, str) for val in df.Var1] # check wether value is no string
df.loc[is_no_string] = '' # replace values that contain no strings with empty strings

# replace every string consisting only of numeric characters with empty string
df =pd.DataFrame({'Var1':['aa', 'bb', '12', 'cc']}, index=[1,2,3,4]) # create dataframe
is_numeric = df.Var1.str.isnumeric() # check whether all characters in each string are numeric
df.loc[is_numeric] = '' # replace numeric strings with empty strings

Я думаю, df['Var1'] = df['Var1'].astype(str) отлично работает для преобразования чисел в строки (посмотрите на вывод следующего кода). Чтобы получить доступ к типу одиночных записей столбца кадра данных, к этим элементам и использовать type () для них.

df =pd.DataFrame({'Var1':['aa', 'bb', 12, 'cc']}, index=[1,2,3,4]) # create dataframe

print(df.Var1.dtype) # columns containing strings are stored as objects 
print(type(df.Var1[1])) # those objects can contain strings and numbers
print(type(df.Var1[3]))
print(df.Var1.to_numpy())

df.Var1 = df.Var1.astype(str)
print(df.Var1.dtype) # column is still object
print(type(df.Var1[1])) 
print(type(df.Var1[3])) # but integer was changed to string
print(df.Var1.to_numpy())

# Output
object
<class 'str'>
<class 'int'>
['aa' 'bb' 12 'cc']

object
<class 'str'>
<class 'str'>
['aa' 'bb' '12' 'cc']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...