python在cs中获取和处理特定字符之间的值

2024-09-29 01:28:00 发布

您现在位置:Python中文网/ 问答频道 /正文

实际上它与熊猫有关,我在一个csv文件中有几个记录(大约40000条),其中一个列值是market_value,例如:

原始记录

player_id,player_name,club,age,market_value,date
3713,massimo-maccarone,UC Sampdoria,31,£2.55m,2011-01-10
3713,massimo-maccarone,UC Sampdoria,31,£1.70m,2011-06-21
3713,massimo-maccarone,FC Empoli,32,£850k,2012-01-01
3713,massimo-maccarone,FC Empoli,32,£680k,2012-06-15
...

这里我想提取market_value的值,并将其转换为如下格式

player_id,player_name,club,age,market_value,date
3713,massimo-maccarone,UC Sampdoria,31,2550000,2011-01-10
3713,massimo-maccarone,UC Sampdoria,31,1700000,2011-06-21
3713,massimo-maccarone,FC Empoli,32,850000,2012-01-01
3713,massimo-maccarone,FC Empoli,32,680000,2012-06-15
...

这意味着我想把它转换成一个数字形式,然后导入数据库。我已经编写了一个regex方法来实现这一点,比如:

import re

def regex_format(test_str):
    if re.search('^£.+k$',test_str):
        return float(re.search('^£(.+)k$',test_str).group(1))*1000
    elif re.search('^£(.+)m$',test_str):
        return float(re.search('^£(.+)m$',test_str).group(1))*1000000
    else:
        return 0.0

它适用于这些字符串,但当我尝试将其应用于pandas的csv文件时,遇到了一个问题,我的代码如下:

import pandas as pd
import currency_format

df=pd.read_csv('the_market_value_o.csv')
df['market_value']=currency_format.regex_format(df['market_value'])
print df

我有个例外,比如:

TypeError:expected string or buffer

然后我尝试通过如下方法将序列转换为字符串:

df['market_value'].astype(basestring)

但它不起作用

顺便说一句,我的python版本是带有pandas 0.18.0的Python 2.7.12 :: Anaconda 4.0.0 (64-bit)

谢谢您的帮助


Tags: csvtestreformatdfvaluemarketplayer
1条回答
网友
1楼 · 发布于 2024-09-29 01:28:00

我认为问题在于df[market_value]是一系列(字符串)而不是单例字符串。把它想象成数据的一个片段/列,就像一个值列表。因此,不妨尝试以下方法:

df['market_value'].map(currency_format.regex_format)

这个答案here有更多这样的函数/例子

相关问题 更多 >