2017-09-21 42 views
-1

我在object类型的熊猫df中有一列,我想解析它以获取字符串中的第一个数字,并创建一个包含该数字的新列作为int使用正则表达式在熊猫数据框中创建新列

例如:

现有的DF

col 
    'foo 12 bar 8' 
    'bar 3 foo' 
    'bar 32bar 98' 

期望中的DF

col    col1 
    'foo 12 bar 8' 12 
    'bar 3 foo'  3 
    'bar 32bar 98' 32 

我有在列系列

int(re.search(r'\d+', df.iloc[0]['col']).group())

012上的任何单个细胞工程代码

上面的代码工作正常,并返回12,因为它应该。但是,当我尝试使用全系列创建一个新的列:

df['col1'] = int(re.search(r'\d+', df['col']).group())

我收到以下错误:

类型错误:预期字符串或字节状物体

我试过包装一str()各地df['col']这得到了在COL1摆脱错误的,但取得了全0

我也试着转换col到的list字符串并遍历list,这只会产生相同的错误。有谁知道我做错了什么?帮助将不胜感激。

+0

检查出来的'DataFrame.apply()'方法。可能你的计算对于简单的分配来说太复杂了。 –

+2

你可以试试'df ['col']。str.extract(r'(\ d +)')' –

+0

@WiktorStribiżew,我还会加上'expand = False' ... – MaxU

回答

0

这将这样的伎俩:

search = []  
for values in df['col']: 
    search.append(re.search(r'\d+', values).group()) 

df['col1'] = search 

输出看起来是这样的:

  col col1 
0 foo 12 bar 8  12 
1  bar 3 foo  3 
2 bar 32bar 98  32 
+0

完美,谢谢! – Cam8593

+0

不客气! – Albo

相关问题