Python 2.7 将包含负字符串的DataFrame列转换为浮点
我有一个包含负字符串的数据帧df,我想将它们转换为浮点: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 . .
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]
,在本例中,它返回一个包含两个负号版本的列表。当我尝试您的建议时,只有一种类型。我对这里出现的问题感到非常困惑。奇怪。您能复制一个复制错误的粘贴吗?这将导致