保留Pandas数据框第7列及以后非空行时触发TypeError报错求助
解决Pandas dropna触发TypeError: unhashable type: 'Index'的问题
问题场景
需要保留Pandas DataFrame中第7列及之后所有列均不为空值的行,运行以下代码时触发错误:
import pandas as pd import numpy as np merged_df = merged_df.dropna(merged_df.columns[7:])
报错信息
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) /tmp/ipykernel_17/1347313789.py in <module> 1 # Drop NA ----> 2 merged_df = merged_df.dropna(merged_df.columns[7:]) 3 merged_df /opt/conda/lib/python3.7/site-packages/pandas/util/_decorators.py in wrapper(*args, **kwargs) 309 stacklevel=stacklevel, 310 ) --> 311 return func(*args, **kwargs) 312 313 return wrapper /opt/conda/lib/python3.7/site-packages/pandas/core/frame.py in dropna(self, axis, how, thresh, subset, inplace) 5942 raise TypeError("supplying multiple axes to axis is no longer supported.") 5943 --> 5944 axis = self._get_axis_number(axis) 5945 agg_axis = 1 - axis 5946 /opt/conda/lib/python3.7/site-packages/pandas/core/generic.py in _get_axis_number(cls, axis) 544 def _get_axis_number(cls, axis: Axis) -> int: 545 try: --> 546 return cls._AXIS_TO_AXIS_NUMBER[axis] 547 except KeyError: 548 raise ValueError(f"No axis named {axis} for object type {cls.__name__}") TypeError: unhashable type: 'Index'
错误原因
dropna()的第一个参数是axis,仅接受0/1或'index'/'columns'这类可哈希的参数,你直接传入了merged_df.columns[7:](一个Index对象),导致触发"unhashable type: 'Index'"错误。要指定检查空值的列,应该用subset参数。
正确代码
import pandas as pd import numpy as np # 保留第7列及之后所有列无空值的行 merged_df = merged_df.dropna(subset=merged_df.columns[7:])
补充说明
subset参数支持传入列名列表或Index对象,用来限定需要检查空值的列范围- 默认
how='any',会删除指定列中任意一列存在空值的行,符合你"所有列均不为空值"的需求;如果需要仅删除指定列全部为空值的行,可显式设置how='all'
内容的提问来源于stack exchange,提问作者melolilili
相关产品推荐
相关产品推荐

