在 python pandas 中将高度(英尺和英寸)更改为整数

itj*_*s18 6 python regex pandas

我有一个包含高度信息的 pandas 数据框,但我似乎无法弄清楚如何将有些非结构化信息转换为整数。

我认为解决这个问题的最佳方法是使用正则表达式,但我遇到的主要问题是,当我尝试简化问题以使用正则表达式时,我通常采用数据帧中的第一项(7'5.5'')并尝试专门对其使用正则表达式。由于引号的原因,我似乎不可能将这些数据放入字符串中。所以,我真的很困惑如何解决这个问题。

这是我的数据框:

    HeightNoShoes   HeightShoes
0   7' 5.5"             NaN
1   6' 11"           7' 0.25"
2   6' 7.75"            6' 9"
3   6' 5.5"          6' 6.75"
4   5' 11"           6' 0"
Run Code Online (Sandbox Code Playgroud)

输出应以英寸为单位:

    HeightNoShoes   HeightShoes
0   89.5                NaN
1   83                 84.25
2   79.75               81
3   77.5              78.75
4   71                  72
Run Code Online (Sandbox Code Playgroud)

我的下一个选择是将其写入 csv 并使用 excel,但我更愿意学习如何在 python/pandas 中执行此操作。任何帮助将不胜感激。

小智 6

前面的问题解答很好的解决了不使用正则表达式的问题。如果您对如何使用您的第一个想法(使用正则表达式)解决问题感到好奇,我将发布此内容。

可以使用正则表达式的方法来解决这个问题。为了将您拥有的数据(例如 7' 5.5")放入 Python 中的字符串中,您可以转义引号。

例如:

py_str = "7' 5.5\""
Run Code Online (Sandbox Code Playgroud)

与正则表达式相结合,您可以从输入数据中提取所需的信息来计算输出数据。输入数据由一个整数(英尺)、后跟 '、一个空格和一个浮点数(英寸)组成。该浮点数由一个或多个数字组成,然后可选地包含一个 。和更多的数字。这是一个可以从输入数据中提取英尺和英寸的正则表达式:([0-9]+)' ([0-9]*\.?[0-9]+)"

正则表达式的第一组检索脚,第二组检索英寸。以下是 python 中函数的示例,该函数根据输入数据(例如 )返回浮点数(以英寸为单位)"7' 5.5\"",如果没有有效匹配,则返回 NaN:

代码:

r = re.compile(r"([0-9]+)' ([0-9]*\.?[0-9]+)\"")
def get_inches(el):
    m = r.match(el)
    if m == None:
        return float('NaN')
    else:
        return int(m.group(1))*12 + float(m.group(2))
Run Code Online (Sandbox Code Playgroud)

例子:

>>> get_inches("7' 5.5\"")
89.5
Run Code Online (Sandbox Code Playgroud)

您可以将该正则表达式应用于数据中的元素。然而,将您自己的函数映射到数据上的解决方案效果很好。我想你可能想看看如何使用你最初的想法来解决这个问题。