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

标签 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"

输出应以英寸为单位:

    HeightNoShoes   HeightShoes
0   89.5                NaN
1   83                 84.25
2   79.75               81
3   77.5              78.75
4   71                  72

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

最佳答案

前面的问题答案是不用正则表达式就很好解决问题。如果您对如何使用您的第一个想法(使用正则表达式)解决问题感到好奇,我会发布这篇文章。

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

例如:

py_str = "7' 5.5\""

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

第一组正则表达式检索英尺,第二组检索英寸。下面是一个 python 函数示例,它根据输入数据(例如 "7' 5.5\"")返回以英寸为单位的 float ,如果没有有效匹配则返回 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))

例子:

>>> get_inches("7' 5.5\"")
89.5

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

关于python - 在 python pandas 中将高度(英尺和英寸)更改为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26986655/

相关文章:

python - python Python : where are the virtual environments stored?

javascript - 使用 JavaScript 拆分 CSV

java - 根据数字/字符模式拆分字符串 - Java

python - 使用 Python 从一系列列表中选择项目

python - Bs4 select_one vs find

python - 如何迭代文件夹中的文件以移动具有特定扩展名的每个文件

javascript - 如何在braintree js+python中创建没有计划的交易?(whiteout订阅)

regex - 正则表达式中的 a-z-A-Z 是什么意思?

python - 使用 PySpark 对数字列进行分箱

python - 将重复项替换为数据框中的第一个值