从字符串转换包含NaN值的整个Pandas数据帧

2024-03-29 11:14:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将pandas数据帧中的所有值从字符串转换为float。我的数据帧包含各种NaN值(例如NaN、NA、None)。例如

import pandas as pd
import numpy as np

my_data = np.array([[0.5, 0.2, 0.1], ["NA", 0.45, 0.2], [0.9, 0.02, "N/A"]])
df = pd.DataFrame(my_data, dtype=str)

我发现转换对象的here和{a2}(以及其他地方)可能是最好的选择。但是,我收到一条消息,它已被弃用(我使用的是Pandas 0.17.1),应该改为使用to\u numeric。在

^{pr2}$

输出:

FutureWarning: convert_objects is deprecated.  Use the data-type specific converters pd.to_datetime, pd.to_timedelta and pd.to_numeric.

但tou numeric似乎并没有真正转换字符串。在

df3 = pd.to_numeric(df, errors='force')

输出:

df2:
     0     1    2
0  0.5  0.20  0.1
1  NaN  0.45  0.2
2  0.9  0.02  NaN

df2 dtypes:
0    float64
1    float64
2    float64
dtype: object

df3:
     0     1    2
0  0.5   0.2  0.1
1   NA  0.45  0.2
2  0.9  0.02  N/A

df3 dtypes:
0    object
1    object
2    object
dtype: object

我应该使用convert_objects并处理警告消息,还是有适当的方法将其转换为numeric?在


Tags: to数据字符串importpandasdataobjectas
2条回答

奇怪的是,这样做:

In [11]:
df.apply(lambda x: pd.to_numeric(x, errors='force'))

Out[11]:
     0     1    2
0  0.5  0.20  0.1
1  NaN  0.45  0.2
2  0.9  0.02  NaN

似乎它不能强迫整个df出于某种原因,这有点令人惊讶

如果你讨厌打字(感谢@Zero),那么你可以使用:

^{pr2}$

您可以尝试^{}和{a2}:

import pandas as pd
import numpy as np

my_data = np.array([[0.5, 0.2, 0.1], ["NA", 0.45, 0.2], [0.9, 0.02, "N/A"]])
df = pd.DataFrame(my_data, dtype=str)

print df.replace({r'N': np.nan}, regex=True).astype(float)
     0     1    2
0  0.5  0.20  0.1
1  NaN  0.45  0.2
2  0.9  0.02  NaN

相关问题 更多 >