2017-10-13 134 views
0

我有一个数据帧,DF,与一列::转换熊猫系列字符串为浮动

print(df['MJD_DUPLICATE']) 

0   (0, 56238, -1, -1, -1, -1, -1, -1, -1, -1, -1,... 
1   (-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1... 
2   (0, 56269, -1, -1, -1, -1, -1, -1, -1, -1, -1,... 

简单地说,我该如何将它转换为一个浮动,以绘制它呢?

b = df.astype(float) 

不工作也不做:

for i in range(len(mjds)): 
    mjds[i] = [float(x) for x in mjds[i]] 

谢谢!

N.B。::

print(df['MJD_DUPLICATE'][0:][0:0]) 

(0, 56279, 0, 56539, 0, 56957, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1) 
Series([], Name: MJD_DUPLICATE, dtype: object) 
+0

为什么你需要转换为浮点图? – wwii

+0

因为否则我得到一个“ValueError:scatter需要y列为数字”错误 – npross

+0

元组中的值不是*数字*? – wwii

回答

0

你尝试在这是一个浮动的数据帧创建一个新的列,然后针对密谋?

df['MJD_DUPLICATE_float'] = df['MJD_DUPLICATE'].astype(float) 
+0

是的,试过这个。 Got :: ValueError:无法将字符串转换为float:'(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 ,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - 1,-1,-1,-1,-1,-1)' – npross

+0

我会尝试然后:df.convert_objects(convert_numeric = True)。您可以检查他们使用的转换类型; df.convert_objects(convert_numeric = True).dtypes – mpmartin618

+0

不,这也行不通。看到上面的编辑。 – npross

0

编写变换各行值的函数,然后使用.apply()

data = {'a':[(' 1 ',' 2 ',' 3 '), ('2','3','4'), (3,4,5)], 
     'b':[('1','2','3'), ('2','3','4'), ('3','4','5')]} 

df = pd.DataFrame(data) 

def f(thing): 
    return tuple(float(n) for n in thing) 

converted = df['a'].apply(f) 
df['a'] = converted 



>>> converted 
0 (1.0, 2.0, 3.0) 
1 (2.0, 3.0, 4.0) 
2 (3.0, 4.0, 5.0) 
Name: a, dtype: object 
>>> df 
       a   b 
0 (1.0, 2.0, 3.0) (1, 2, 3) 
1 (2.0, 3.0, 4.0) (2, 3, 4) 
2 (3.0, 4.0, 5.0) (3, 4, 5) 
>>> 

如果您的数据看起来像这样

data = {'a':['''(1,2,3)''', '''(2,3,4)''', '''(3,4,5)'''], 
     'b':['''(1,2,3)''', '''(2,3,4)''', '''(3,4,5)''']} 

改变你的函数来处理它

def f(thing): 
     thing = thing.strip() 
     thing = thing.replace('(', '') 
     thing = thing.replace(')', '') 
     thing = thing.split(',') 
     return tuple(float(n) for n in thing) 
+0

我得到一个::“ValueError:无法将字符串转换为浮点数:'('error – npross

+0

我将元组中的每个元素都更改为字符串,甚至添加了空格,并且仍然有效。如果你的数据有其他*问题*,你需要确定它们是什么,并在你正在申请的函数中处理它们。 – wwii

+0

好的,所以上面的代码运行和工作,但我仍然无法绘制任何东西... – npross