Заменить подстроку в массиве из нескольких типов данных в Julia - PullRequest
3 голосов
/ 01 августа 2020

У меня есть массив, импортированный из CSV с несколькими типами данных. Я хочу удалить все запятые (,) и знаки доллара ($). Есть три столбца с запятыми и знаками доллара.

При создании нового массива для столбца с запятыми и знаками доллара я могу успешно сделать это с помощью нижеприведенного.

using CSV, DataFrames
df = DataFrame!(CSV.File("F:SampleFile.csv"))
dfmo = Array(df[!,30])
dfmo = collect(skipmissing(dfmo))
dfmo = replace.(dfmo,"\$"=>"")
dfmo = replace.(dfmo,","=>"")

Когда пытаясь применить ко всему вектору с помощью ниже

df=replace.(df,","=>"")

, я получаю сообщение об ошибке:

MethodError: no method matching similar(::Int64, ::Type{Any})
Closest candidates are:
  similar(!Matched::ZMQ.Message, ::Type{T}, !Matched::Tuple{Vararg{Int64,N}} where N) where T at C:\Users\

Затем я попытался выполнить индексацию с помощью ниже, а также получил сообщение об ошибке для индексации в строку.

for i in df
    for j in df
        if datatype(df[i,j]) == String
            df=replace(df[i,j],","=>"")
        end
    end
end
MethodError: no method matching similar(::Int64, ::Type{Any})
Closest candidates are:
  similar(!Matched::ZMQ.Message, ::Type{T}, !Matched::Tuple{Vararg{Int64,N}} where N) where T at C:\Users\

Каков наиболее эффективный способ замены подстрок в массиве из нескольких типов данных?

1 Ответ

2 голосов
/ 01 августа 2020

Увидев ваш код, я понимаю, что вам нужна операция на месте (т.е. изменение исходного фрейма данных).

Используя подход l oop, как в вашем коде, вы можете сделать это:

for col in axes(df,2)
    for row in axes(df, 1)
        cell = df[row, col]
        if cell isa AbstractString
            df[row, col] = replace(cell, "," => "")
        end
    end
end

Используя широковещательную рассылку, вы можете добиться того же:

helper_fun(cell) = cell isa AbstractString ? replace(cell, "," => "") : cell

df .= helper_fun.(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...