pandas - 将df.index从float64更改为unicode或string

时间:2016-02-12 17:23:26

标签: python pandas indexing dataframe rows

我想要更改数据帧'从float64到string或unicode的索引(行)。

我认为这样可行,但显然不是:

public static bool IsValidEmailAddress(string candidateEmailAddr)
{
    string regexExpresion = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
    return (Regex.IsMatch(candidateEmailAddr, regexExpresion)) && 
           (Regex.Replace(candidateEmailAddr, regexExpresion, string.Empty).Length == 0);
}

错误消息:

#check type
type(df.index)
'pandas.core.index.Float64Index'

#change type to unicode
if not isinstance(df.index, unicode):
    df.index = df.index.astype(unicode)

2 个答案:

答案 0 :(得分:64)

你可以这样做:

# for Python 2
df.index = df.index.map(unicode) 

# for Python 3 (the unicode type does not exist and is replaced by str)
df.index = df.index.map(str)

至于为什么你会以不同于从int转换为float的方式,这是numpy(pandas所基于的库)的特点。

每个numpy数组都有一个 dtype ,它基本上是 machine 类型的元素:以这种方式, numpy直接处理本机类型,而不是Python对象,它解释了如何如此快速。因此,当您将dtype从int64更改为float64时,numpy将在C代码中强制转换每个元素。

还有一个特殊的dtype: object ,基本上会提供指向Python对象的指针。

如果您需要字符串,则必须使用对象 dtype。但是使用.astype(object)不会给你你想要的答案:它会创建一个带有 object dtype的索引,但是将Python float对象放在里面。

在这里,通过使用map,我们将索引转换为具有相应函数的字符串:numpy获取字符串对象并理解索引必须具有对象 dtype,因为这样做' s唯一可以容纳字符串的dtype。

答案 1 :(得分:1)

对于python 3和pandas 0.19或更高版本,我发现以下对我来说很好用

    # Python 3 (pandas 0.19 or latter versions)
    df.index.astype(str, copy = False)