1

我是 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
4

1 回答 1

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+'而不是将匹配的字符集限制为数字'.+'

于 2013-10-05T00:28:21.303 回答