考虑以下情况:
In [2]: a = pd.Series([1,2,3,4,'.'])
In [3]: a
Out[3]:
0 1
1 2
2 3
3 4
4 .
dtype: object
In [8]: a.astype('float64', raise_on_error = False)
Out[8]:
0 1
1 2
2 3
3 4
4 .
dtype: object
Run Code Online (Sandbox Code Playgroud)
我本来期望一个允许转换的选项,同时将错误的值(例如那个.)转换为NaNs.有没有办法实现这个目标?
cs9*_*s95 36
自v0.17起,object不推荐使用.
为了一系列转换为数字,使用float与convert_objects论证.
# Setup.
s = pd.Series(['1','2','3','4','.'])
s
0 1
1 2
2 3
3 4
4 .
dtype: object
Run Code Online (Sandbox Code Playgroud)
pd.to_numeric(s, errors='coerce')
0 1.0
1 2.0
2 3.0
3 4.0
4 NaN
dtype: float64
Run Code Online (Sandbox Code Playgroud)
如果您需要pd.to_numeric填写,请使用errors='coerce'.
pd.to_numeric(s, errors='coerce').fillna(0, downcast='infer')
0 1
1 2
2 3
3 4
4 0
dtype: float64
Run Code Online (Sandbox Code Playgroud)
注意,NaN将尝试在可能的情况下将浮点数向下转换为整数.如果您不想要,请删除参数.
扩展名Series.fillna
如果您需要将其扩展到DataFrames,则需要将其应用于每一行.你可以使用downcast='infer'.
pd.__version__
# '0.24.1'
pd.to_numeric(s, errors='coerce').astype('Int32')
0 1
1 2
2 3
3 4
4 NaN
dtype: Int32
Run Code Online (Sandbox Code Playgroud)
# Setup.
np.random.seed(0)
df = pd.DataFrame({
'A' : np.random.choice(10, 5),
'C' : np.random.choice(10, 5),
'B' : ['1', '###', '...', 50, '234'],
'D' : ['23', '1', '...', '268', '$$']}
)[list('ABCD')]
df
A B C D
0 5 1 9 23
1 0 ### 3 1
2 3 ... 5 ...
3 3 50 2 268
4 7 234 4 $$
df.dtypes
A int64
B object
C int64
D object
dtype: object
Run Code Online (Sandbox Code Playgroud)
你也可以这样做DataFrames; 虽然我的测试表明这稍微慢了:
df2 = df.apply(pd.to_numeric, errors='coerce')
df2
A B C D
0 5 1.0 9 23.0
1 0 NaN 3 1.0
2 3 NaN 5 NaN
3 3 50.0 2 268.0
4 7 234.0 4 NaN
df2.dtypes
A int64
B float64
C int64
D float64
dtype: object
Run Code Online (Sandbox Code Playgroud)
如果您有许多列(数字;非数字),则可以通过仅应用DataFrame.apply非数字列使其更高性能.
df.transform(pd.to_numeric, errors='coerce')
A B C D
0 5 1.0 9 23.0
1 0 NaN 3 1.0
2 3 NaN 5 NaN
3 3 50.0 2 268.0
4 7 234.0 4 NaN
Run Code Online (Sandbox Code Playgroud)
应用DataFrame.transform沿着列(即pd.to_numeric,默认值)应为长DataFrames稍快.
Jef*_*eff 19
In [30]: pd.Series([1,2,3,4,'.']).convert_objects(convert_numeric=True)
Out[30]:
0 1
1 2
2 3
3 4
4 NaN
dtype: float64
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
88333 次 |
| 最近记录: |