在Pandas中高效编辑字符串并转换为浮点数

时间:2017-06-26 17:21:06

标签: python python-3.x pandas data-analysis

我有一个大型数据集(appx 1GB,例如,字符串'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          -

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

   salary
0     200
1     400
2     400
3     600
4       0

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

2 个答案:

答案 0 :(得分:3)

这是使用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和字符串方法。

In [134]: df['salary'].str.extract('(\d+)', expand=True).fillna(0)
Out[134]:
     0
0  200
1  400
2  400
3  600
4    0

答案 1 :(得分:2)

考虑数据框df

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

df

    Salary
0  200-400
1      500
2  600-700

<强> pandas
pd.Series.str.split

df.Salary.str.split('-').str[0].astype(float)

0    200.0
1    500.0
2    600.0
Name: Salary, dtype: float64

<强> numpy
np.core.defchararray.split

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