我是 Pandas 的新手,正在努力将一列数据分成两列。当然,我想拆分'-'字符。我希望得到的列是'FICO.low'
and '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
我是 Pandas 的新手,正在努力将一列数据分成两列。当然,我想拆分'-'字符。我希望得到的列是'FICO.low'
and '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
使用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+'
而不是将匹配的字符集限制为数字'.+'
。