Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:将带空字符串的列转换为浮点_Python_Pandas - Fatal编程技术网

Python 熊猫:将带空字符串的列转换为浮点

Python 熊猫:将带空字符串的列转换为浮点,python,pandas,Python,Pandas,在我的应用程序中,我收到一个pandas数据帧(比如,block),它有一个名为est的列。此列可以包含字符串或浮点数的组合。我需要将列中的所有值转换为浮点数,并使列类型为float64。我使用以下代码执行此操作: block[est].convert_objects(convert_numeric=True) block[est].astype('float') 这适用于大多数情况。但是,在一种情况下,est包含所有空字符串。在这种情况下,第一条语句执行时不会出错,但列中的空字符串仍然是空字

在我的应用程序中,我收到一个pandas数据帧(比如,
block
),它有一个名为
est
的列。此列可以包含字符串或浮点数的组合。我需要将列中的所有值转换为浮点数,并使列类型为
float64
。我使用以下代码执行此操作:

block[est].convert_objects(convert_numeric=True)
block[est].astype('float')
这适用于大多数情况。但是,在一种情况下,
est
包含所有空字符串。在这种情况下,第一条语句执行时不会出错,但列中的空字符串仍然是空字符串。然后,第二条语句导致错误:
ValueError:无法将字符串转换为float:

如何修改代码以处理包含所有空字符串的列

编辑:我知道我可以只做
块[est].replace(“,np.NaN)
,但我想知道是否有办法只处理我缺少的
convert\u对象
astype

澄清:出于项目特定的原因,我需要使用pandas 0.16.2

下面是与一些示例数据的交互,演示了故障:

>>> block = pd.DataFrame({"eps":["", ""]})
>>> block = block.convert_objects(convert_numeric=True)
>>> block["eps"]
0
1
Name: eps, dtype: object
>>> block["eps"].astype('float')
...
ValueError: could not convert string to float:

使用以下工具更容易实现:

熊猫。给你数字

“强制”将任何值错误转换为
NaN

df['eps'].astype('float')
0    1.0
1    1.6
2    1.6
3    NaN
4    NaN
5    NaN
Name: eps, dtype: float64
然后,您可以应用其他函数而不会出现错误:

df['eps'].round()
0    1.0
1    2.0
2    2.0
3    NaN
4    NaN
5    NaN
Name: eps, dtype: float64

我不这么认为。我在这里遇到的问题是空字符串,而不是修改非空值。请发布几行示例数据好吗?与我的pandas版本不兼容:
AttributeError:“DataFrame”对象没有属性“data”
对不起,这是我给该列的名称。根据您的示例,这应该是eps。这将用NaN替换有效数据,这不是我想要做的。例如,如果我的数据帧包含[“”,“1.0”],则“1.0”也会转换为NaN。这就是为什么示例数据要走很长的路。你能寄一些吗?
df['eps'].astype('float')
0    1.0
1    1.6
2    1.6
3    NaN
4    NaN
5    NaN
Name: eps, dtype: float64
df['eps'].round()
0    1.0
1    2.0
2    2.0
3    NaN
4    NaN
5    NaN
Name: eps, dtype: float64