#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
чем удалить ее.)