Вы можете использовать понимание списка, чтобы проверить тип каждой записи в столбце и заменить не-строки. Для замены строк, состоящих только из цифровых символов, я рекомендую 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']