如何使用map函数拆分字符,获取最小值,并存储在新创建的pandas列中

时间:2015-01-24 17:16:29

标签: python pandas lambda

我通过拆分字符来清理csv文件中的数据,这样我得到两个数字,即(750,755)而不是(750-755)。我成功了。现在我试图获取最小值,即(750)并创建一个名为FICO.Score的新列来存储这些最小值。这是我无法弄清楚的部分,因为当我尝试打印新列时出现语法错误。

import pandas as pd
loansData = pd.read_csv('https://spark-public.s3.amazonaws.com/dataanalysis/loansData.csv')

fc = loansData['FICO.Range']
fico = list(map((lambda x: x.split('-')), fc))
loansData['FICO.Score'] = list(map((lambda x: min(x), fico))

print loansData['FICO.Score']

1 个答案:

答案 0 :(得分:3)

假设最小值始终是'min_val-max_val'中的第一个值。然后你可以使用向量化的str方法来分割字符串并获取第一个值并转换为int64

In [14]:

loansData['FICO.Score'] = loansData['FICO.Range'].str.split('-').str[0].astype(np.int64)
loansData['FICO.Score']
Out[14]:
81174    735
...
55610    680
38576    675
3116     670
Name: FICO.Score, Length: 2500, dtype: int64

您遇到错误的原因是您有一个额外的前导括号:

In [19]:

loansData['FICO.Score1'] = list(map(lambda x: min(x), fico))
loansData['FICO.Score1']
Out[19]:
15867    715
94971    670
36911    665
41200    670
83869    735
53853    725
...
49957    685
23735    705
65882    740
55610    680
38576    675
3116     670
Name: FICO.Score1, Length: 2500, dtype: object

但请注意,这仍然会给你留下object的dtype str,这不是你想要的