【问题标题】:Julia: Replacing a number with a string in an arrayJulia:用数组中的字符串替换数字
【发布时间】:2015-03-06 01:50:03
【问题描述】:

我有一个数字(整数或浮点数)值数组(它实际上是 DataFrame 对象中的一列),并且希望将所有 0 实例替换为“NaN”或某些文本。 (或转换 1-->"M" 和 2-->"F"。)

我遇到的问题是,当我写array[i] = "text" 时,我得到了错误:

`convert` has no method matching convert(::Type{Int64}, ::ASCIIString)

我该如何解决这个问题?另外,做相当于 Pandas 的df.column.replace({1:"M", 2:"F"}, inplace=True) 的最有效方法是什么?

我确实试过这个:

df[:sex] = [ {1 => "M", 2 => "F"}[i] for i in df[:sex] ]

...但是当我只替换一些值时会遇到问题(然后我得到“未找到键 X”错误,因为我从 [:sex] 传递一个不在我的字典中的值)。

【问题讨论】:

  • 我不知道是否有更多的朱利安方法来替换列,但你可以使用get 方法——即get(replace_dict, i, i)——来避免在与在 Python 中使用 replace_dict.get(i, i) 的方式相同。
  • 我不认为你可以做一个简单的替换操作,因为DataFrame 中的列的内容必须都是相同的类型。如果您想在同一列中混合数字和字符串,我认为您需要创建一个全新的类型为Union(Number, String) 或类型Any 的列。如果列已经是Any 类型,那么if blah == 0; blah = "NaN"; end 有什么问题(在列的循环内)?

标签: python arrays replace julia


【解决方案1】:

这是一个开始:

df[:sex] = convert(DataArray{Union(Int64, ASCIIString), 1}, df[:sex])

df[df[:sex] .== 1, :sex] = "M"
df[df[:sex] .== 2, :sex] = "F"

【讨论】:

    【解决方案2】:

    也许你最好使用PooledDataArray

    PooledDataArray{T}DataArray{T} 的变体,经过优化,可表示包含多次重复的少量唯一值的数组——这在处理分类数据时很常见。

    ...相当于pandas/R中的Categorical。


    julia> df = DataFrame([1 3; 2 4; 1 6])
    3x2 DataFrames.DataFrame
    | Row | x1 | x2 |
    |-----|----|----|
    | 1   | 1  | 3  |
    | 2   | 2  | 4  |
    | 3   | 1  | 6  |
    
    julia> PooledDataArray(DataArrays.RefArray(df[:x1]), [:Male, :Female])
    3-element DataArrays.PooledDataArray{Symbol,Int64,1}:
     :Male
     :Female
     :Male
    
    julia> df[:x1] = PooledDataArray(DataArrays.RefArray(df[:x1]), [:Male, :Female])
    3-element DataArrays.PooledDataArray{Symbol,Int64,1}:
     :Male
     :Female
     :Male
    
    julia> df
    3x2 DataFrames.DataFrame
    | Row | x1     | x2 |
    |-----|--------|----|
    | 1   | Male   | 3  |
    | 2   | Female | 4  |
    | 3   | Male   | 6  |
    

    注意:这是有效的,因为参考数组包含从 1 到标签大小 (2) 的值。

    【讨论】:

      猜你喜欢
      • 2014-03-21
      • 2010-09-28
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      • 2019-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多