在Pandas中有效地编辑字符串并转换为float

2024-10-02 14:20:14 发布

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

我有一个很大的数据集(appx1gb,有一列薪水范围,以字符串'20000-30000'为例。我想删除连字符后的所有内容并转换为浮点。然而,这并不总是存在的,所以我还需要一些条件来检查它是否存在。在

除了遍历整个列并逐个转换每个列之外,有没有一种快速的Pandas方法来实现这一点?我觉得这似乎是一个常见的问题,但是类似的问题并不能解决大数据集的问题。在

输入示例如下:

df = pd.DataFrame({'salary': ['200 - 300', '400', '400-500', '600', '-']})

df
Out: 
      salary
0  200 - 300
1        400
2    400-500
3        600
4          -

对于这些值,首选输出为:

^{pr2}$

0可以是任何填充值,我刚刚选择了0。在


Tags: 数据方法字符串示例内容dataframepandasdf
2条回答

考虑数据帧df

df = pd.DataFrame(dict(Salary=['200-400', '500', '600-700']))

df

    Salary
0  200-400
1      500
2  600-700

pandas
^{}

^{pr2}$

numpy
^{}

splits = np.core.defchararray.split(df.Salary.values.astype(str), '-')
df.assign(Salary=np.array([x[0] for x in splits], dtype=float))

   Salary
0   200.0
1   500.0
2   600.0

这里有一种使用apply的方法

In [111]: df = pd.DataFrame({'salary': ['200 - 300', '400', '400-500', '600', '-']})

In [112]: df['salary'].apply(lambda x: x.split('-')[0].strip()).replace('', '0').astype(int)
Out[112]:
0    200
1    400
2    400
3    600
4      0
Name: salary, dtype: int32

另一种方法是使用regex和字符串方法。在

^{pr2}$

相关问题 更多 >