Очистка текста для удаления [] и «» в кадре данных julia

#julia #dataframes.jl

#Юля #фреймы данных.jl

Вопрос:

У меня есть фрейм данных со столбцом text , который представляет собой список строк, например:

 text  

[«текст1″,»текст2»] [«текст3″,»текст4»]

Как я могу очистить строку de, чтобы иметь другой столбец text_clean , подобный этому:

 text  

текст1,текст2 , текст3,текст4

Когда я набираю repl df , я получаю:

 text String ["string"] ["string","anotherestring"]  

но когда я печатаю:

 df[!,:text]  

Я получаю:

 "["string"]" "["string",anotherestring"]"  

Я хотел бы создать новую колонку, которая называется text_clean :

 string string, anotherstring  

Спасибо

Комментарии:

1. Можете ли вы уточнить: в настоящее время у вас есть столбец с массивами строк, и вы хотите объединить каждый массив в одну строку, разделенную запятыми? Было бы полезно, если бы вы могли просто опубликовать выходные df["text"] данные из вашего REPL (где df указано имя вашего фрейма данных).

2. @SundarR Я обновил вопрос. Тнх

Ответ №1:

 juliagt; a = [["text", "text2"], ["text"], ["text", "text2", "text", "text2"]] 3-element Vector{Vector{String}}:  ["text", "text2"]  ["text"]  ["text", "text2", "text", "text2"]  juliagt; join.(a, ",") 3-element Vector{String}:  "text,text2"  "text"  "text,text2,text,text2"  

замените a своей колонкой, например df.text

Ответ №2:

Похоже, что ваши строки буквально содержат значения, содержащие [ s, " s и т. Д.

Прежде всего, убедитесь, что это предназначено. Например, у вас может быть что-то вроде vec = ["string", "anotherstring"] . В какой-то момент до этого у вас мог быть код, выполняющий эквивалент df[1, :text] = string(vec) . Вместо этого df[1, :text] = join(vec, ", ") при назначении text столбцу сделайте так, чтобы сам исходный столбец был чистым.

Если вышесказанное неприменимо, и вам приходится иметь дело с указанным столбцом, то вы создаете свой новый очищенный столбец следующим образом:

 juliagt; df = DataFrame(:text =gt; [string(["hello", "world"]), string(["this","is","SPARTA"])]) 2×1 DataFrame  Row │ text   │ String  ─────┼──────────────────────────  1 │ ["hello", "world"]  2 │ ["this", "is", "SPARTA"]  juliagt; df[!, :text_clean] = map(df.text) do str  str |gt;  s -gt; strip(s, ('[', ']')) |gt; #remove [ ]  s -gt; strip.(split(s, ", "), '"') |gt; # remove inner "  sv -gt; join(sv, ", ")  end 2-element Vector{String}:  "hello, world"  "this, is, SPARTA"  

(Возможно, вам придется изменить второй аргумент на split приведенный выше в зависимости от того, есть ли у вас пробел после запятых в text столбце.)

Или, используя собственный синтаксический анализ Джулии,

 juliagt; df[!, :text_clean] = map(df.text) do str  str |gt; Meta.parse |gt;  ex -gt; ex.head == :vect amp;amp; eval(ex) |gt;  sv -gt; join(sv, ", ")   end 2-element Vector{String}:  "hello, world"  "this, is, SPARTA"  

( ex.head == :vect Это базовая проверка на вменяемость, чтобы убедиться, что строка находится в том формате, который вы ожидаете, и не содержит ничего вредоносного, прежде eval чем удалить ее.)