我是Pandas的新手,我正在努力将一列数据分成两列。当然,我想分开' - '字符。我希望生成的列为'FICO.low'
和'FICO.high'
。
loansData['FICO.Range'][0:5]
- 81174 --- 735-739
- 99592 --- 715-719
- 80059 --- 690-694
- 15825 --- 695-699
- 33182 --- 695-699
Name: FICO.Range, dtype: object
答案 0 :(得分:5)
使用extract
(即将发布的0.13版本):
In [140]: s
Out[140]:
0 81174 --- 735-739
1 99592 --- 715-719
2 80059 --- 690-694
3 15825 --- 695-699
4 33182 --- 695-699
Name: column, dtype: object
In [141]: res = s.str.extract('(.+) --- (?P<FICO_low>.+)-(?P<FICO_high>.+)')
In [142]: res
Out[142]:
0 FICO_low FICO_high
0 81174 735 739
1 99592 715 719
2 80059 690 694
3 15825 695 699
4 33182 695 699
在较早版本的pandas
中,您可以这样做:
In [22]: res = s.str.match('(.+) --- (.+)-(.+)')
In [23]: res
Out[23]:
0 (81174, 735, 739)
1 (99592, 715, 719)
2 (80059, 690, 694)
3 (15825, 695, 699)
4 (33182, 695, 699)
Name: column, dtype: object
In [24]: df = DataFrame(map(list, res.values), columns=[0, 'FICO_low', 'FICO_high'])
In [25]: df
Out[25]:
0 FICO_low FICO_high
0 81174 735 739
1 99592 715 719
2 80059 690 694
3 15825 695 699
4 33182 695 699
如果确实希望列名中的'.'
返回:
In [28]: df.rename(columns=lambda x: x.replace('_', '.') if isinstance(x, basestring) else x)
Out[28]:
0 FICO.low FICO.high
0 81174 735 739
1 99592 715 719
2 80059 690 694
3 15825 695 699
4 33182 695 699
但是你不能再用标签完成它们了:(
仅供参考我在这里使用正则表达式玩得有点快,你可能想要使用'\d+'
而不是'.+'
将匹配字符集限制为数字。