想把pandas里的数据类型object转换为可供numpy操作的float类型

newbeeklose 2019-02-25 09:42:20
首先我用pandas读取了excel里的数据
data=pd.read_excel('AAA.xlsx')
cc=np.array(data)
cc.astype(float)
print(cc.dtype)

报错:ValueError: could not convert string to float


注:data=np.array(data,dtype=np.float)
traindata=pd.DataFrame(traindata)

和astype一样不能转换
...全文
1766 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
newbeeklose 2019-02-26
  • 打赏
  • 举报
回复
引用 13 楼 陈年椰子 的回复:
按你的excel文件,这样就可以啦。

data=pd.read_excel('aaa.xlsx')
data1 = []
for x in data[0]:
    n1 = eval(str(x))
    data1.extend(n1)

data2 = np.array(data1)
print data2.dtype
是的,问题已经解决,谢谢!
陈年椰子 2019-02-25
  • 打赏
  • 举报
回复
按你的excel文件,这样就可以啦。

data=pd.read_excel('aaa.xlsx')
data1 = []
for x in data[0]:
n1 = eval(str(x))
data1.extend(n1)

data2 = np.array(data1)
print data2.dtype
newbeeklose 2019-02-25
  • 打赏
  • 举报
回复
引用 11 楼 陈年椰子 的回复:
那就是每一行都是字符串咯? aaa.xlsx 截个图看看
陈年椰子 2019-02-25
  • 打赏
  • 举报
回复
那就是每一行都是字符串咯?
aaa.xlsx 截个图看看
newbeeklose 2019-02-25
  • 打赏
  • 举报
回复
引用 6 楼 陈年椰子 的回复:
看起来还没转成列表呀, 是个字符串 data=pd.read_excel('AAA.xlsx') cc=np.array(data) # 看看这两行输出是啥 print(cc.dtype) print(len(cc)) #cc.astype(float) #print(cc.dtype)
输出如图,数据是152行的一维数组,相当于二维数组 数据类型是pandas里的object
流泪熊猫头 2019-02-25
  • 打赏
  • 举报
回复
引用 7 楼 流泪熊猫头 的回复:
列表中的字符串不满足浮点数转换格式,将每个元素用replace(", ", "")方法转成正常的格式
看成逗号了, replace(" ", "")把空格删去
陈年椰子 2019-02-25
  • 打赏
  • 举报
回复
把excel 文件截个图看看。

如果excel 的单元格存放的数据是这样的: [[12.12, 23.45], [2.21,4.56]]
你的问题有可能要这么解决。


c1 = '[[12.12, 23.45], [2.21,4.56]]'
c2 = eval(c1)
c3 = np.array(c2)
print c3.dtype
流泪熊猫头 2019-02-25
  • 打赏
  • 举报
回复
列表中的字符串不满足浮点数转换格式,将每个元素用replace(", ", "")方法转成正常的格式
陈年椰子 2019-02-25
  • 打赏
  • 举报
回复
看起来还没转成列表呀, 是个字符串



data=pd.read_excel('AAA.xlsx')
cc=np.array(data)
# 看看这两行输出是啥
print(cc.dtype)
print(len(cc))

#cc.astype(float)
#print(cc.dtype)
newbeeklose 2019-02-25
  • 打赏
  • 举报
回复
引用 3 楼 陈年椰子 的回复:
那可能是你的数据里有非数字存在, 转换失败了。
是不是里面有空格啊,应该怎么做呢?
newbeeklose 2019-02-25
  • 打赏
  • 举报
回复
引用 3 楼 陈年椰子 的回复:
那可能是你的数据里有非数字存在, 转换失败了。
是不是里面有空格啊,应该怎么做呢?
陈年椰子 2019-02-25
  • 打赏
  • 举报
回复
那可能是你的数据里有非数字存在, 转换失败了。
newbeeklose 2019-02-25
  • 打赏
  • 举报
回复
引用 1 楼 陈年椰子 的回复:
cc1 = cc.astype(np.float64) 这样能转吗?
不能诶
陈年椰子 2019-02-25
  • 打赏
  • 举报
回复
cc1 = cc.astype(np.float64)

这样能转吗?

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧