我有一个数字(整数或浮点)值的数组(它实际上是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]传递了一个值不在我的词典中。)
答案 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)。