Python 尝试将数据帧列转换为浮点时发生ValueError
我正在尝试将下面我的dataframePython 尝试将数据帧列转换为浮点时发生ValueError,python,pandas,Python,Pandas,我正在尝试将下面我的dataframedf的Yield\u pct列下的所有数据转换为浮点类型,但在这样做时面临问题。我得到错误ValueError:无法将字符串转换为float:'na',因此我添加了行if row1['Yield\u pct']!='na':添加到下面的代码中,但添加这一行后,我会收到相同的错误 Date Maturity Yield_pct Currency 0 1986-01-01 0.25
df
的Yield\u pct
列下的所有数据转换为浮点类型,但在这样做时面临问题。我得到错误ValueError:无法将字符串转换为float:'na'
,因此我添加了行if row1['Yield\u pct']!='na':
添加到下面的代码中,但添加这一行后,我会收到相同的错误
Date Maturity Yield_pct Currency
0 1986-01-01 0.25 na CAD
1 1986-01-02 0.25 0.0948511020 CAD
2 1986-01-03 0.25 0.0972953210 CAD
3 1986-01-06 0.25 0.0965403640 CAD
4 1986-01-07 0.25 0.0953292440 CAD
for (i1, row1) in (df.iterrows()):
if row1['Yield_pct'] != 'na':
row1['Yield_pct'] = float(row1['Yield_pct'])
if isinstance(row1['Yield_pct'], float)==1:
print('SUCCESS')
else:
print('FAILURE')
多谢各位
编辑:这是数据帧的下部df
:
920538 2015-01-19 empty string CAD
920539 2015-01-20 empty string CAD
920540 2015-01-21 empty string CAD
920541 2015-01-22 empty string CAD
920542 2015-01-23 empty string CAD
920543 2015-01-26 empty string CAD
我现在使用的代码:
df = update('CAD')[0]
for (i1, row1) in (df.iterrows()):
df = df.convert_objects(convert_numeric=True)
if isinstance(row1['Yield_pct'], float)==1:
print('SUCCESS')
else:
print('FAILURE')
只需使用,它会将任何无效值强制转换为NaN
:
In [75]:
df = df.convert_objects(convert_numeric=True)
df
Out[75]:
Date Maturity Yield_pct Currency
0 1986-01-01 0.25 NaN CAD
1 1986-01-02 0.25 0.094851 CAD
2 1986-01-03 0.25 0.097295 CAD
3 1986-01-06 0.25 0.096540 CAD
4 1986-01-07 0.25 0.095329 CAD
你的问题是什么?请注意,您的错误表示无法将字符串“na”转换为浮点。您缺少代码中“na”之前的空格。这是一个起点。
convert\u对象
可以处理空对象strings@EdChum非常感谢。但是,当我尝试这个失败时
仍然会被打印出来。请用你尝试过的代码编辑你的问题,现在不起作用。我不知道你为什么反复调用convert\u objects
,在调用convert\u objects
后,你只需要调用它一次,也就是当你声称它失败时,df.info()
show?你可能会得到你认为是错误的东西,因为dtype
实际上是np.float64
我不知道这是件事。“太好了!”埃德楚姆,谢谢你。但是当我尝试使用行df=df.convert\u objects(convert\u numeric=True)row1['Yield\u pct']=float(row1['Yield\u pct'])
时,我不知道这是为什么。我不理解您的注释,使用convert\u objects
您不需要任何进一步的说明casting@EdChum不幸的是,列中的所有数据都是字符串,因此,我仍然需要将它们转换为float
,因此我使用row1['Yield\u pct']=float(row1['Yield\u pct'])
。如果我单独使用df=df.convert\u对象(convert\u numeric=True)
,我将无法满足此要求。df['Yield\u pct']=df['Yield\u pct'].astype(np.float64)
有效吗?如果它不起作用,那是因为你有一些奇怪的值,你没有在你的样本数据中显示出来,你能发布这个吗