朱莉娅:用数组中的字符串替换数字

时间:2015-01-08 01:58:33

标签: python arrays replace julia

我有一个数字(整数或浮点)值的数组(它实际上是DataFrame对象中的一列),并且想要替换,例如,0到" NaN&#34的所有实例;或一些文字。 (或转换1 - >" M"和2 - >" F&#34 ;.)

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

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

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

我试过这个:

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

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

2 个答案:

答案 0 :(得分:2)

这是一个开始:

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

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

答案 1 :(得分:1)

或许你最好使用PooledDataArray

  

PooledDataArray{T}DataArray{T}的一种变体,用于表示包含少量唯一值重复次数的数组 - 这在处理分类数据时通常会发生。

...它相当于pandas / R中的分类。


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)。