Python 我如何在没有应用程序的情况下乘以列的值?

Python 我如何在没有应用程序的情况下乘以列的值?,python,pandas,data-science,Python,Pandas,Data Science,我正在尝试将数据集中某列中的每个值(例如100-120美元)转换为美元(有许多不同的货币,如欧元等),因此根据它们的货币,我需要使用相应的转换率进行转换。 我的输入文件如下所示: d = {'location': ['US', 'UK'], 'price': ['USD10-20', 'GBP10-20']} df = pd.DataFrame(data=d) 地点|价格 10-20美元 英国| 10-20英镑 等等 我试过这个: def convertCurrency(price):

我正在尝试将数据集中某列中的每个值(例如100-120美元)转换为美元(有许多不同的货币,如欧元等),因此根据它们的货币,我需要使用相应的转换率进行转换。 我的输入文件如下所示:

d = {'location': ['US', 'UK'], 'price': ['USD10-20', 'GBP10-20']}
df = pd.DataFrame(data=d)
地点|价格

10-20美元

英国| 10-20英镑

等等

我试过这个:

def convertCurrency(price):
    c=CurrencyConverter()
    currency= price[0:3]
    numbers=re.findall(r'\d+',price)
    lowerbound= re.findall(r'\d+',price)[0]
    res=""
    upperbound='x'
    if currency=='USD':
        return price
    if len(numbers)>1:
        upperbound=numbers[1]
    first=int(c.convert(int(lowerbound),price,"USD"))
    if upperbound != 'x':
        second=int(c.convert(int(upperbound),price,"USD"))
        res=''+currency+str(first)+"-"+str(second)
    else:
        res = '' + currency + str(first)
    return res
用apply来称呼它

df['price'] = df.apply(lambda row: convertCurrency(row.price), axis=1)
但这需要的时间太长了。 我也试过:

df['price'] = convertCurrency(df['price'])
但这将抛出一个错误,因为函数获取的是一个series对象而不是字符串。我必须改变什么,或者有其他方法吗? 我期望的结果是

地点|价格

10-20美元

英国| 14-28美元

让我们尝试使用获得可用值,然后在轴1上:

将熊猫作为pd导入
从货币转换器导入货币转换器
d={'location':['US','UK','price':['USD10-20','GBP10-20']}
df=pd.DataFrame(数据=d)
c=电流转换器()
#提取值
df['currency','v1','v2']=df['price'].str.extract(r'(\w{3})(\d+)-(\d+),
expand=True)
#非美元货币的面具
m=df[‘货币’].ne(‘美元’)
#如果不是美元,则替换价格
df.loc[m,'价格']=df[m]。应用(
兰姆达s:f'美元'
f'{int(c.convert(int(s.v1),s.currency,“USD”)}
f'-'
f'{int(c.convert(int(s.v2),s.currency,“USD”))},
轴=1
)
#删除添加的列
df=df.drop(列=['currency','v1','v2'])
打印(df)
输出:

location price 0 US USD10-20 1 UK USD13-27 位置价格 0美元10-20美元 1英国13-27美元
请添加示例输入/输出df请将数据的一小部分作为可复制的代码段包括在内,该代码段可用于测试以及预期的输出。看,还有。好的,我试着给你提供一个小例子,你能试着
打印([x.upper()+'|'+y代表x,y在zip中(d['location'],d['price']))]
并确认这是否是你想要的吗?不,我需要为列中的每个值调用convert函数。。。