Я думаю, что есть лучший способ передать регулярное выражение в sep=r',"|",|(?<=\d),'
и, возможно, какую-то другую комбинацию параметров. Я не понял это полностью.
Вот менее оптимальный вариант:
df = pd.read_csv('s083838383.csv', sep='@#$%^', engine='python')
header = df.columns[0]
print(df)
Почему sep='@#$%^'
? Это просто мусор, который позволяет читать файл без символа sep. Это может быть любой случайный символ, и он просто используется как средство для импорта данных в df
объект для работы.
df
выглядит так:
id,employee,details,createdAt
0 1,John,"{"Country":"USA","Salary":5000,"Review...
1 2,Sarah,"{"Country":"Australia", "Salary":6000...
Тогда вы можете использовать str.extract
, чтобы применить регулярное выражение и расширить столбцы:
result = df[header].str.extract(r'(.+),(.+),("\{.+\}"),(.+)',
expand=True).applymap(str.strip)
result.columns = header.strip().split(',')
print(result)
result
:
id employee details createdAt
0 1 John "{"Country":"USA","Salary":5000,"Review":null}" "2018-09-01"
1 2 Sarah "{"Country":"Australia", "Salary":6000,"Review... "2018-09-05"
Если вам нужно, чтобы начальные и конечные кавычки были удалены из строковых значений details
, вы можете сделать:
result['details'] = result['details'].str.strip('"')
Если объект details
должен содержать dict
s вместо строк, вы можете сделать:
from json import loads
result['details'] = result['details'].apply(loads)