Python 2.7 将包含负字符串的DataFrame列转换为浮点

Python 2.7 将包含负字符串的DataFrame列转换为浮点,python-2.7,pandas,Python 2.7,Pandas,我有一个包含负字符串的数据帧df,我想将它们转换为浮点: NY_resitor1 NY_resitor2 SF_type SF_resitor2 45 "-36" Resis 40 47 "36" curr 34 . .

我有一个包含负字符串的数据帧df,我想将它们转换为浮点:

NY_resitor1  NY_resitor2    SF_type        SF_resitor2 
     45          "-36"          Resis          40                  
     47           "36"          curr           34                    
      .            .           .              .                   
     49           "39"          curr           39 
     45          "-11"          curr           12 
     12          "-200"          Resis          45
这是我写的代码

df["NY_resitor2 "]=df["NY_resitor2 "].astype(float)
但我有一个错误:

ValueError: could not convert string to float: "-32"

问题出在哪里?

我认为这可能是因为字符串数据中有一个奇怪的unicode版本的
“-”
。例如,这应该起作用:

>>> import pandas as pd
>>> ser = pd.Series(['-36', '36'])
>>> ser.astype(float)
0   -36
1    36
dtype: float64
但事实并非如此,因为我已将标准减号替换为:

您可以通过使用
str.replace()
,专门删除有问题的字符来解决这个问题:

如果这不是问题,那么我不知道是什么


编辑:另一种可能是字符串中可能有引号。e、 g

>>> ser3 = pd.Series(['"-36"', '"36"'])
>>> ser3.astype(float)
...
ValueError: could not convert string to float: '"-36"'
在这种情况下,您需要首先去掉这些:

>>> ser3.str.replace('"', '').astype(float)
0   -36
1    36
dtype: float64

我认为这可能是在字符串数据的某个地方有一个奇怪的unicode版本的
“-”
。例如,这应该起作用:

>>> import pandas as pd
>>> ser = pd.Series(['-36', '36'])
>>> ser.astype(float)
0   -36
1    36
dtype: float64
但事实并非如此,因为我已将标准减号替换为:

您可以通过使用
str.replace()
,专门删除有问题的字符来解决这个问题:

如果这不是问题,那么我不知道是什么


编辑:另一种可能是字符串中可能有引号。e、 g

>>> ser3 = pd.Series(['"-36"', '"36"'])
>>> ser3.astype(float)
...
ValueError: could not convert string to float: '"-36"'
在这种情况下,您需要首先去掉这些:

>>> ser3.str.replace('"', '').astype(float)
0   -36
1    36
dtype: float64

我认为这可能是在字符串数据的某个地方有一个奇怪的unicode版本的
“-”
。例如,这应该起作用:

>>> import pandas as pd
>>> ser = pd.Series(['-36', '36'])
>>> ser.astype(float)
0   -36
1    36
dtype: float64
但事实并非如此,因为我已将标准减号替换为:

您可以通过使用
str.replace()
,专门删除有问题的字符来解决这个问题:

如果这不是问题,那么我不知道是什么


编辑:另一种可能是字符串中可能有引号。e、 g

>>> ser3 = pd.Series(['"-36"', '"36"'])
>>> ser3.astype(float)
...
ValueError: could not convert string to float: '"-36"'
在这种情况下,您需要首先去掉这些:

>>> ser3.str.replace('"', '').astype(float)
0   -36
1    36
dtype: float64

我认为这可能是在字符串数据的某个地方有一个奇怪的unicode版本的
“-”
。例如,这应该起作用:

>>> import pandas as pd
>>> ser = pd.Series(['-36', '36'])
>>> ser.astype(float)
0   -36
1    36
dtype: float64
但事实并非如此,因为我已将标准减号替换为:

您可以通过使用
str.replace()
,专门删除有问题的字符来解决这个问题:

如果这不是问题,那么我不知道是什么


编辑:另一种可能是字符串中可能有引号。e、 g

>>> ser3 = pd.Series(['"-36"', '"36"'])
>>> ser3.astype(float)
...
ValueError: could not convert string to float: '"-36"'
在这种情况下,您需要首先去掉这些:

>>> ser3.str.replace('"', '').astype(float)
0   -36
1    36
dtype: float64



对我有用。熊猫的哪个版本?此外,您的第一个值是“-36”,但错误是“-32”。有什么不一致的原因吗?实际上最后一个数字是这样的-200Hmm,问题是你嵌入了双引号吗?i、 e而不仅仅是字符串
-36
,您实际上有
“-36”
?如果是这样,您可以使用
df['NY_resitor2']=df['NY_resitor2'].str.replace('','')删除所有这些
然后我认为您可以使用
as\u type
convert\u numeric
as进行转换normal@EdChum,有效,你能把你的答案写出来让我投票吗?谢谢,我认为没有必要,用户jakevdp添加了一个更新,涵盖了对我有效的内容。熊猫的哪个版本?还有,你的第一个值是“-36“但错误是“-32”。产生差异的原因是什么?事实上,对于最后一个数字-200Hmm,问题是您嵌入了双引号吗?即不仅仅是字符串
-36
您实际上有
“-36”
?如果是这样,您可以使用
df['NY_resitor2']=df['NY_resitor2']删除所有这些内容。str.replace('“,”)
然后我认为您可以使用
as\u type
convert\u numeric
as进行转换normal@EdChum,行得通,你能把你的答案写出来让我投票吗?谢谢,我认为这是不必要的,用户jakevdp已经添加了一个更新,涵盖了对我有用的内容。熊猫的哪个版本?此外,您的第一个值是“-36”,但错误是“-32”。有什么不一致的原因吗?实际上最后一个数字是这样的-200Hmm,问题是你嵌入了双引号吗?i、 e而不仅仅是字符串
-36
,您实际上有
“-36”
?如果是这样,您可以使用
df['NY_resitor2']=df['NY_resitor2'].str.replace('','')删除所有这些
然后我认为您可以使用
as\u type
convert\u numeric
as进行转换normal@EdChum,有效,你能把你的答案写出来让我投票吗?谢谢,我认为没有必要,用户jakevdp添加了一个更新,涵盖了对我有效的内容。熊猫的哪个版本?还有,你的第一个值是“-36“但错误是“-32”。产生差异的原因是什么?事实上,对于最后一个数字-200Hmm,问题是您嵌入了双引号吗?即不仅仅是字符串
-36
您实际上有
“-36”
?如果是这样,您可以使用
df['NY_resitor2']=df['NY_resitor2']删除所有这些内容。str.replace('“,”)
然后我认为您可以使用
as\u type
convert\u numeric
as进行转换normal@EdChum,行得通,你能把你的答案写出来让我投票吗?谢谢,我认为这是不必要的,用户jakevdp已经添加了一个更新,涵盖了这两者之间的区别−', '-'); 另一个的键盘字符是什么?我不知道任何键盘字符-我从链接页面复制并粘贴了该字符。我怀疑这可能是罪魁祸首的原因是,我以前从文件加载数据时遇到过类似问题。您可以通过运行来检查它,例如
np.unique(['-']+[ser2.sum()]中的char for char]
,在本例中,它返回一个包含两个负号版本的列表。当我尝试您的建议时,只有一种类型。我对这里出现的问题感到非常困惑。奇怪。您能复制一个复制错误的粘贴吗?这将导致