Python 朱莉娅:用数组中的字符串替换数字
我有一个数字(整数或浮点)值数组(它实际上是DataFrame对象中的一列),并希望替换,例如,0到“NaN”或某些文本的所有实例。(或转换为1-->“M”和2-->“F”。) 我遇到了这样一个问题:当我写Python 朱莉娅:用数组中的字符串替换数字,python,arrays,replace,julia,Python,Arrays,Replace,Julia,我有一个数字(整数或浮点)值数组(它实际上是DataFrame对象中的一列),并希望替换,例如,0到“NaN”或某些文本的所有实例。(或转换为1-->“M”和2-->“F”。) 我遇到了这样一个问题:当我写数组[I]=“text”时,我得到了错误: `convert` has no method matching convert(::Type{Int64}, ::ASCIIString) 我该怎么做?另外,做Pandas的df.column.replace({1:“M”,2:“F”},inpl
数组[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] ]
。。。但是,当我只替换一些值时,这就遇到了一个问题(因为我传递的是一个不在dict中的[:sex]值,所以我得到了“key X not found”错误)。这里是一个开始:
df[:sex] = convert(DataArray{Union(Int64, ASCIIString), 1}, df[:sex])
df[df[:sex] .== 1, :sex] = "M"
df[df[:sex] .== 2, :sex] = "F"
也许你最好有一个:
PooledDataArray{T}
:一种DataArray{T}
的变体,用于表示包含大量重复的少量唯一值的数组,这在处理分类数据时经常发生
…它相当于pandas/R中的一个范畴
注意:这是因为引用数组包含从1到标签大小(2)的值。我不知道是否有更多的朱利安方式来替换列,但是您可以使用
get
方法,即get(replace_dict,I,I)
,以与使用replace_dict.get相同的方式避免丢失键错误(i,i)
在Python中。我认为您不能执行简单的替换操作,因为DataFrame
中的列的内容必须是相同的类型。我认为您需要创建一个类型为Union(Number,String)的全新列
或键入Any
,如果要在同一列中混合数字和字符串。如果该列已经是Any
类型,那么如果blah==0;blah=“NaN”;end(在该列的循环内),则有什么问题?
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 |