我有一个大型数据集(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
。
答案 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