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

how to use map function to split character, get min values, and store in a newly created pandas column

我通过拆分一个字符来清理 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']

假设最小值始终是 '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,这不是您想要的