根据理想情况下使用熊猫的条件基于子字符串提取新的子字符串列

时间:2019-09-15 07:10:20

标签: python-3.x pandas for-loop

我有一个包含数百个条目的数据集(Excel)。在一个字符串列中,包含大多数信息。信息除以“ _”,然后由人类输入。因此,不可能使用索引位置。

要创建可用的数据基础,必须从另一列的此列中提取信息。

仅搜索模式=' * v * '是不够的。但是结合第一项必须为数字的条件,它可以工作。

我试图使其与迭代,迭代项,str.strip,str.extract等一起使用。但是我通过for循环获得了最好的解决方案。

     pattern = '_*v*_'
    test = []


    for i in df['col']:
'#Split the string in substrings
        i = i.split('_')
        for c in i:
            if c.find('x') == 1:
                if c[0].isdigit():
                   # print(c)
                    test.append(c)
                else:
'#To be able to fix a few rows manually
                    test.append(0)
[4]: test =[22v3, 33v55, 4v2]



#Input

+-----------+-----------+
|    col    | targetcol |
+-----------+-----------+
| as_22v3   |           |
| 33v55_bdd |           |
| Ave_4v2   |           |
+-----------+-----------+

#Output

+-----------+-----------+--+
|    col    | targetcol |  |
+-----------+-----------+--+
| as_22v3   | 22v3      |  |
| 33v55_bdd | 33v55     |  |
| Ave_4v2   | 4v2       |  |
+-----------+-----------+--+

我的代码确实有效,但仅适用于前几行。它在36个值之后停止,我不知道为什么。当然没有错误消息,当然,由于列表的大小不同,因此无法将列表分配给DataFrame系列。

2 个答案:

答案 0 :(得分:0)

pandas.Series.str.extract应该会帮助:

>>> df['col'].str.extract(r'(\d+v+\d+)')
       0
0   22v3
1  33v55
2    4v2
df = pd.DataFrame({
    'col': ['as_22v3', '33v55_bdd', 'Ave_4v2']
})
df['targetcol'] = df['col'].str.extract(r'(\d+v+\d+)')

编辑

df = pd.DataFrame({
    'col': ['as_22v3', '33v55_bdd', 'Ave_4v2', '_22 v3', 'space 2,2v3', '2.v3',
    '2.111v999', 'asd.123v77', '1    v7', '123 v 8135']
})

pattern = r'(\d+(\,[0-9]+)?(\s+)?v\d+)'

df['result'] = df['col'].str.extract(pattern)[0]
           col   result
0      as_22v3     22v3
1    33v55_bdd    33v55
2      Ave_4v2      4v2
3       _22 v3    22 v3
4  space 2,2v3    2,2v3
5         2.v3      NaN
6    2.111v999  111v999
7   asd.123v77   123v77
8      1    v7  1    v7
9   123 v 8135      NaN

答案 1 :(得分:0)

您说它在36个值之后停止吗?您说这是您正在处理的Excel文件吗?您可以尝试做的一件事是将数据集保存到.csv文件,然后尝试使用pd.read_csv函数读取该文件。有时Excel文件中还有一些不容易看到的额外字符。

相关问题