ниже работает для меня. Проблема с типом возникает потому, что вы не можете изменить тип всех строк таким образом. Для этого вам также потребуется лямбда-функтор.
Существует дополнительная проблема, заключающаяся в том, что регулярное выражение и обработка исключений не будут работать так. Я предложил решение для этого, но вы можете рассмотреть другое регулярное выражение, если вы хотите, чтобы это работало для других столбцов. Я очень новичок в области регулярных выражений, так что может быть более универсальное решение для вашей проблемы.
import re
import pandas as pd
import numpy as np
s='{"mail":vip@a.com,"type":"a","r_id":"1312","level":307},{"mail":vipx@a.com,"type":"b","r_id":"1111"}'
data_raw=re.split(r'[\{\}]',s)
data_raw=data_raw[1::2]
data=pd.DataFrame(data_raw)
# This is a regex wrapper which gets the row of our pandas dataframes and the columns that we want.
def regex_wrapper(row,column):
match = re.search(r'"' + column + '":"?(\d+)"?', str(row))
if match:
return match.group(1)
else:
return np.nan
data['r_id'] = data[0].apply(lambda row: regex_wrapper(row,"r_id"))
data['level'] = data[0].apply(lambda row: regex_wrapper(row,"level"))
del data[0]