pandas - Pandas 操作数据帧和异常处理
问题描述
我是 Jupyter 中的 pandas 新手,并且继承了一些非常奇怪的代码。我有一个数据框对象,其中包含任意命名的列,其中大多数包含整数。在其中一个牢房中有
df = df/100
这似乎将数据框中的每个条目除以 100。不幸的是,某些条目可能是字符串,这会导致错误,因为您不能除以 100。有谁知道捕获此类异常并继续前进的方法。我想如果单元格是整数/双精度/浮点数以进行除法,并且它是一个不做任何事情的字符串。我在想类似的东西
for (lambda x in df.columns):
if x.type != "str":
df[x] = df[x]/100
我可能需要为行添加一个循环并使用 df.iloc 或其他东西,但实际上我不确定执行此操作的最佳方法,但我确信有一些可爱的方法可以访问这些信息。
解决方案
您对“什么都不做”的描述有点含糊:您要保留原始值还是将其指定为 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)
推荐阅读
- bash - bash - source builtin 和 $HISTCMD 变量
- bash - `echo " $1 % 2" | bc -l` 在终端或 bash 脚本中不起作用,但 `bc` 在 `bc` 中接受这些参数
- rxjs - 如何使用 NGRX 在 Angular 5 中防止内容跳转/滚动
- angular - 如何在模板字符串中转义引号和大括号
- python - 如何在 Auth 对象的 __call__ 方法中签署 requests.Request 的正文?
- scala - Akka HTTP 设置响应标头
- android - 是否可以创建一个接受任何对象列表的动态 RecyclerView 适配器