假设我在数据框中有一个列,其中包含一些数字和一些非数字
>> df['foo']
0 0.0
1 103.8
2 751.1
3 0.0
4 0.0
5 -
6 -
7 0.0
8 -
9 0.0
Name: foo, Length: 9, dtype: object
Run Code Online (Sandbox Code Playgroud)
如何将此列转换为np.float,并将其他所有不浮动的列转换为NaN?
当我尝试:
>> df['foo'].astype(np.float)
Run Code Online (Sandbox Code Playgroud)
要么
>> df['foo'].apply(np.float)
Run Code Online (Sandbox Code Playgroud)
我明白了 ValueError: could not convert string to float: -
我的问题与此非常相似,但我需要转换整个数据帧而不仅仅是一系列.该to_numeric函数一次只能在一个系列上运行,并且不能替代已弃用的convert_objects命令.有没有办法convert_objects(convert_numeric=True)在新的pandas版本中获得与命令类似的结果?
谢谢MikeMüller的例子.df.apply(pd.to_numeric)如果值都可以转换为整数,则效果很好.如果在我的数据框中我有无法转换为整数的字符串怎么办?例:
df = pd.DataFrame({'ints': ['3', '5'], 'Words': ['Kobe', 'Bryant']})
df.dtypes
Out[59]:
Words object
ints object
dtype: object
Run Code Online (Sandbox Code Playgroud)
然后我可以运行已弃用的函数并获取:
df = df.convert_objects(convert_numeric=True)
df.dtypes
Out[60]:
Words object
ints int64
dtype: object
Run Code Online (Sandbox Code Playgroud)
运行该apply命令会给我带来错误,即使是尝试和处理也是如此.
考虑以下情况:
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.有没有办法实现这个目标?