Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python获取并处理csv中某些字符之间的值_Python_String_Csv_Pandas_Series - Fatal编程技术网

python获取并处理csv中某些字符之间的值

python获取并处理csv中某些字符之间的值,python,string,csv,pandas,series,Python,String,Csv,Pandas,Series,实际上它与熊猫有关,我在一个csv文件中有几个记录(大约40000条),其中一个列值是market\u 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-maccaro

实际上它与熊猫有关,我在一个csv文件中有几个记录(大约40000条),其中一个列值是
market\u 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\u值的值
,并将其转换为如下格式

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
...
这意味着我想将其转换为数字形式,然后导入数据库。我已经编写了一个正则表达式方法来实现这一点,如:

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版本是
Python2.7.12::Anaconda4.0.0(64位)
0.18.0


非常感谢您的帮助。

我认为问题在于,
df[market\u value]
是一系列字符串,而不是单一字符串。将其视为数据的一个片段/列——就像一个值列表。因此,请尝试以下方法:

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

这个答案有更多这样的函数/示例。

谢谢,它的代码很好用,
df['market\u value']=df['market\u value'].map(currency\u format.regex\u format)