根据条件循环值

时间:2019-10-24 10:12:24

标签: python loops if-statement jupyter-notebook

我正在尝试在python中创建一个函数,该函数检查数据帧中的数据是否遵循特定结构 就我而言,我需要确保id列的结构类似于此ID0101-10

这是我的代码,但是它不起作用,我不断收到索引错误:

i = 0 
for i in df["id"]:
    if ('-' in df["id"]):
        df["id"].iloc[i] = df["id"].iloc[i]
        i += 1
    else:
        df.drop(df["id"].iloc[i])
        i += 1

if you're curious about my data, its like this:
id            name 
ID0101-10     John    
ID0101-11     Mary 
8454          Test
MMMM          MMMM
ID0101-01     Ben
MN87876       00.00

我正在尝试通过删除虚拟值来清理数据

编辑:我收到此错误 TypeError:无法使用非整数键按位置索引编制索引

感谢您的任何帮助

1 个答案:

答案 0 :(得分:2)

如果我理解正确,则可以执行以下操作:

import pandas as pd

df = pd.DataFrame({'id':['ID0101-10', 'ID0101-11', '8454', 'MMMM', 'ID0101-01', 'MN87876'],
                   'name':['John', 'Mary', 'Test', 'MMMM', 'Ben', '00.00']})

result = df[df['id'].str.startswith('ID0101-')]

print(result)

输出:

          id  name
0  ID0101-10  John
1  ID0101-11  Mary
4  ID0101-01   Ben

作为一般规则,您几乎不需要循环访问熊猫数据帧,使用本地熊猫函数几乎总是更快。

对于更复杂的匹配,您可以使用正则表达式:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.match.html