pandas DataFrame值为Object、删首列误删日期列如何解决?
Pandas使用问题解决方案
问题1:打印DataFrame任意值仅获取到Object类型的id值,无法得到实际存储内容
原因
单元格内存储的是未定义字符串表示方法的自定义对象/引用对象,或取数操作误用了返回对象id的方法。
解决步骤
- 先查看各列数据类型,确认问题列的类型:
print(df.dtypes) - 取问题列单个元素查看实际类型:
print(type(df.iloc[0, 0]))(可替换为对应单元格的行列位置) - 对列做类型转换转为可打印的基础类型:
若需转字符串:df['目标列名'] = df['目标列名'].astype(str)
若需转数值:df['目标列名'] = pd.to_numeric(df['目标列名'], errors='coerce') - 若为读入数据时的格式问题,读入阶段即可指定类型:
df = pd.read_csv('文件路径', dtype={'目标列名': str})
问题2:使用df[0]删除第一列时误删了需要保留的日期列
原因
pandas中df[参数]默认是按列名匹配索引,不是按位置索引。出现该问题是因为你要保留的日期列的列名刚好为0,所以df[0]匹配到了日期列而非位置上的第一列。
解决方法
如果需要按位置删除列,使用以下两种安全写法即可:
- 用iloc按位置切片保留剩余列(推荐,易读性高):
df = df.iloc[:, 1:]
上述代码会保留所有行,从位置索引为1的列(第二列)开始往后取,自动删除位置第一的列。 - 用drop方法指定删除位置第一的列:
df.drop(df.columns[0], axis=1, inplace=True)
其中df.columns[0]会先获取位置第一的列的实际列名,再执行删除,不会误删其他列。
问题参考截图
内容的提问来源于stack exchange,提问作者Tonino Fernandez
相关产品推荐
相关产品推荐

