创建单行for循环时可以包含多个语句吗?

时间:2019-03-07 14:21:48

标签: python data-science

我有一个要迭代的数组。该数组由数字和符号组成的字符串组成。 像这样:1.105亿欧元 我想遍历它并删除所有欧元符号和M,然后将带有字符串的数组作为整数返回。 知道数组是表中的一列,我将如何做?

7 个答案:

答案 0 :(得分:1)

您可以strip个字符

>>> x = '€110.5M'
>>> x.strip('€M')
'110.5'

答案 1 :(得分:1)

def sanitize_string(ss):
     ss = ss.replace('$', '').replace('€', '').lower()
     if 'm' in ss:
         res = float(ss.replace('m', '')) * 1000000
     elif 'k' in ss:
         res = float(ss.replace('k', '')) * 1000
     return int(res)

这可以应用于列表,如下所示:

>>> ls = [sanitize_string(x) for x in ["€3.5M", "€15.7M" , "€167M"]]
>>> ls
[3500000, 15700000, 167000000]

如果您想将其应用于表的列:

dataFrame = dataFrame.price.apply(sanitize_string) # Assuming you're using DataFrames and the column is called 'price'

答案 2 :(得分:0)

您可以使用列表推导从另一个列表构造一个列表:

foo = ["€13.5M", "€15M" , "€167M"]
foo_cleaned = [value.translate(None, "€M")]

str.translate用第一个参数None替换后一个字符串中所有出现的字符。

答案 3 :(得分:0)

尝试

arr = ["€110.5M","€110.5M","€110.5M","€110.5M","€110.5M","€110.5M","€110.5M"]

f = [x.replace("€","").replace("M","") for x in arr]

答案 4 :(得分:0)

您可以根据需要随时在字符串上调用{{3}}。最初的解决方案可能是这样的:

int(elem.replace('€', '').replace('M', ''))

这时,数组中仍然有字符串。如果要以整数形式返回它们,则可以改写[110, 111, 112]。但是请注意,在浮点之后,您将失去所有东西,也就是说,您将以{{1}}结尾。

答案 5 :(得分:0)

您可以使用正则表达式来做到这一点。

import re

str =  "€110.5M"
x = re.findall("\-?\d+\.\d+", str )
print(x)

我不太了解问题的第二部分。

答案 6 :(得分:0)

您可以使用字符串理解:

numbers = [float(p.replace('€','').replace('M','')) for p in a]

给出:

[110.5, 210.5, 310.5]