熊猫操纵数据帧和异常处理

时间:2020-04-06 21:42:44

标签: pandas dataframe exception

我是Jupyter中的熊猫新手,并且继承了一些非常奇怪的代码。我有一个带有任意命名列的数据框对象,其中大多数包含整数。在其中一个单元格中

df = df/100

这似乎将数据帧中的每个条目都除以100。不幸的是,某些条目可能是字符串,并且由于无法将其除以100而导致错误。有人知道捕获这种异常并继续前进的方法吗? 。我想如果单元格是整数/双精度数/浮点数,以便进行除法运算,如果它是一个字符串,则不执行任何操作。我在想类似的东西

    for (lambda x in df.columns):
        if x.type != "str":
           df[x] = df[x]/100 

我可能需要为行添加一个循环并使用df.iloc或其他东西,但实际上我不确定执行此操作的最佳方法,但是我确定有一些可爱的方法可以访问此信息。

3 个答案:

答案 0 :(得分:1)

您对“不执行任何操作”的描述有点模糊:您要保留原始值还是将其指定为NA?另外,每一列都有单一数据类型还是混合类型?

这是一种解决方案:

# Mock data
df = pd.DataFrame({
    'col1': [1, 'Two', 3, 'Four'],
    'col2': ['Five', 6, 'Seven', 8]
})

# Try converting every column to numeric before the division
# If the operation cannot be carried out, assign NaN
tmp = df.apply(pd.to_numeric, errors='coerce')  / 100

# Replace NaN cells with the original values from df
result = tmp.where(tmp.notnull(), df)

答案 1 :(得分:0)

您可以具有对一行中的每个单元格进行操作的功能:

def f(*row): 
    to_return = [] 
    for cell in row: 
        try: 
            to_return.append(cell / 100) 
        except TypeError: 
             to_return.append(cell) 
    return to_return 

然后将该功能应用于每一行:

new_df = pd.DataFrame([f(*row) for row in 
                       df[[col for col in df.columns]].values],
                      columns=df.columns)  

答案 2 :(得分:0)

使用try / except语句。这使您可以做一些事情,除非出现错误,然后指定在这种情况下要做什么。例如:

for col in df.columns):
     try:
          df[x] = df[x]/100
     except TypeError:
          pass