我有一个包含高度信息的 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/