在熊猫中拆分一列

时间:2013-10-05 00:18:22

标签: pandas

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

1 个答案:

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