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)
您可以将该正则表达式应用于数据中的元素。然而,将您自己的函数映射到数据上的解决方案效果很好。我想你可能想看看如何使用你最初的想法来解决这个问题。
归档时间: |
|
查看次数: |
9444 次 |
最近记录: |