我是Jupyter中的熊猫新手,并且继承了一些非常奇怪的代码。我有一个带有任意命名列的数据框对象,其中大多数包含整数。在其中一个单元格中
df = df/100
这似乎将数据帧中的每个条目都除以100。不幸的是,某些条目可能是字符串,并且由于无法将其除以100而导致错误。有人知道捕获这种异常并继续前进的方法吗? 。我想如果单元格是整数/双精度数/浮点数,以便进行除法运算,如果它是一个字符串,则不执行任何操作。我在想类似的东西
for (lambda x in df.columns):
if x.type != "str":
df[x] = df[x]/100
我可能需要为行添加一个循环并使用df.iloc或其他东西,但实际上我不确定执行此操作的最佳方法,但是我确定有一些可爱的方法可以访问此信息。
答案 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