将英尺转换为厘米

时间:2021-04-29 09:30:44

标签: python pandas dataframe

    Name                  Team      Number  Position    Age    Height   Weight  College           Salary
1   Jae Crowder     Boston Celtics  99.0    SF          25.0    6-6      235.0  Marquette       6796117.0
2   John Holland    Boston Celtics  30.0    SG  2       7.0      6-5     205.0  Boston University   NaN

嗨,我有这张表,我想在新列中将高度从英尺转换为 CM,高度列 RN 既不是浮动也不是 int,所以我需要先提取它并对数字进行操作。< /p>

那么

3 个答案:

答案 0 :(得分:1)

使用 str 函数和点

一种可能更快的方式(矢量化)是使用 str 函数。

<块引用>

您要执行的操作可以通过在高度列中的 2 个元素和 2 个转换乘数之间应用点积来完成。

[feet, inches] @ [30.48, 2.54] = feet*30.48 + inches*2.54
  1. str.split 将字符串分解为列表。
  2. 然后 apply(pd.Series) 将列表分成 2 个单独的列。
  3. 最后,astype(int) 将每个单元格转换为 int
  4. 最后,dot 使用转化乘数对每一行执行点积。
conversions = [30.48, 2.54]
df['new'] = df['Height'].str.split('-').apply(pd.Series).astype(int).dot(conversions)
0    198.12
1    167.64
2     35.56
dtype: float64

使用 lambda 函数和点

如果您更喜欢 lambda 函数,这里是相同的代码 -

conversions = [30.48, 2.54]

df['new'] = df['Height'].apply(lambda x: pd.Series(map(int, x.split('-'))).dot(conversions))
0    198.12
1    167.64
2     35.56
dtype: float64

答案 1 :(得分:0)

看起来不错的一步是先将您的高度列分成两部分(英尺 + 英寸),然后再从那里开始:

df['feet'] = df['Height'].apply(lambda x: int(x.split('-')[0]))
df['inches'] = df['Height'].apply(lambda x: int(x.split('-')[1]))
df['feet_in_cm'] = df['feet'] * 30.48
df['inches_in_cm'] = df['inches'] * 2.54
df['height_in_cm'] = df['feet_in_cm'] + df['inches_in_cm']

答案 2 :(得分:0)

假设列中唯一的值是具有 3 个字符的字符串(number_of_feet、'-'、number_of_inches),那么解决方案可能是这样的:

your_table['Height'].apply(lambda x: int(x.split('-')[0])*30.48 + int(x.split('-')[1])*2.54)

但是,正如我从表格的第二行看到的那样,您的字符串中有一些额外的字符,这可能需要额外的预处理(在这种情况下,空格,但它们不会影响代码 - 字符串应该很容易改为整数)。