我想要更改数据帧'从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)
答案 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)