我想将所有的string值转换Pandas DataFrame成float,我可以定义一个简短的函数来做到这一点,但它不是Pythonic的方法.我的DataFrame看起来像这样:
>>> df = pd.DataFrame(np.array([['1', '2', '3'], ['4', '5', '6']]))
>>> df
0 1 2
0 1 2 3
1 4 5 6
>>> df.dtypes
0 object
1 object
2 object
dtype: object
>>> type(df[0][0])
<type 'str'>
Run Code Online (Sandbox Code Playgroud)
我只是想知道是否有一些内置函数Pandas DataFrame将所有string值转换为float.如果你知道Pandas doc上的内置函数,请发布链接.
假设所有值都可以正确转换为浮点数,您可以使用DataFrame.astype()函数将完整数据帧的类型转换为浮点数。例子 -
df = df.astype(float)
Run Code Online (Sandbox Code Playgroud)
演示 -
In [5]: df = pd.DataFrame(np.array([['1', '2', '3'], ['4', '5', '6']]))
In [6]: df.astype(float)
Out[6]:
0 1 2
0 1 2 3
1 4 5 6
In [7]: df = df.astype(float)
In [8]: df.dtypes
Out[8]:
0 float64
1 float64
2 float64
dtype: object
Run Code Online (Sandbox Code Playgroud)
.astype()函数还有一个raise_on_error参数(默认为 True),您可以将其设置为False忽略错误。在这种情况下,原始值用于 DataFrame -
In [10]: df = pd.DataFrame([['1', '2', '3'], ['4', '5', '6'],['blah','bloh','bleh']])
In [11]: df.astype(float,raise_on_error=False)
Out[11]:
0 1 2
0 1 2 3
1 4 5 6
2 blah bloh bleh
Run Code Online (Sandbox Code Playgroud)
要将系列/列转换为浮点数,再次假设所有值都可以转换,您可以使用[Series.astype()][2]. 例子 -
df['somecol'] = df['somecol'].astype(<type>)
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用df.convert_objects(numeric=True).它试图将数字字符串转换为数字,不可转换的值变为NaN:
import pandas as pd
df = pd.DataFrame([['1', '2', '3'], ['4', '5', 'foo'], ['bar', 'baz', 'quux']])
df = df.convert_objects(convert_numeric=True)
print(df)
Run Code Online (Sandbox Code Playgroud)
产量
0 1 2
0 1 2 3
1 4 5 NaN
2 NaN NaN NaN
Run Code Online (Sandbox Code Playgroud)
相反,在上面的DataFrame中df.astype(float)会提高ValueError: could not convert string to float: quux一些字符串(例如'quux')不是数字.
注意:在未来版本的pandas中(在0.16.2之后),函数参数将numeric=True代替convert_numeric=True.
| 归档时间: |
|
| 查看次数: |
12139 次 |
| 最近记录: |