You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何强制Pandas列查询返回字符串及避免Excel列名被解析为日期

解决Pandas解析Excel列名为日期及强制列返回字符串的问题

一、阻止列名"Jun-17"被解析为datetime类型

Pandas默认会尝试识别表头中的日期格式,导致"Jun-17"被转成datetime对象。你有两种简洁的解决方式:

方式1:读取后直接将列名转为字符串

这是最直接的办法,读取数据后把所有列名强制转换成字符串类型:

import pandas as pd
df = pd.read_excel('Sample.xlsx', sheet_name='Sheet1')
# 将列名转为字符串
df.columns = df.columns.astype(str)
print("Column headings:")
print(df.columns.tolist())

输出的列名将变成['Column One', 'Column Two', '2018-06-17 00:00:00', 'Column Three']——如果想保留原始的"Jun-17"格式,推荐用下面的方式。

方式2:读取时避免解析表头为日期

这种方法先把表头当作普通数据行读取,再手动设置列名并转换为字符串,能完美保留原始列名格式:

import pandas as pd
# 先读取所有内容,不设置表头
temp_df = pd.read_excel('Sample.xlsx', sheet_name='Sheet1', header=None)
# 提取第一行作为列名,强制转为字符串
df_columns = temp_df.iloc[0].astype(str)
# 从第二行开始加载实际数据,并设置列名
df = temp_df[1:].rename(columns=dict(zip(temp_df.columns, df_columns)))
# 重置索引(可选,让索引从0开始)
df = df.reset_index(drop=True)

print("Column headings:")
print(df.columns.tolist())

这样输出的列名就会是['Column One', 'Column Two', 'Jun-17', 'Column Three'],完全符合预期。


二、强制列查询返回字符串类型,禁止自动解析内容

要让Pandas不自动解析列内容,而是强制返回字符串,有几种常用方法:

方法1:读取时全局指定所有列类型为字符串

通过dtype=str参数,让Pandas读取所有列时都以字符串类型加载:

import pandas as pd
# 读取时强制所有列为字符串类型
df = pd.read_excel('Sample.xlsx', sheet_name='Sheet1', dtype=str)
# 此时查询任意列,返回的都是字符串类型
print(type(df['Jun-17'].iloc[0]))  # 输出 <class 'str'>

方法2:指定特定列转为字符串

如果只需要部分列保持字符串类型,用converters参数精准控制:

import pandas as pd
# 仅指定"Jun-17"和"Column One"列为字符串类型
df = pd.read_excel('Sample.xlsx', sheet_name='Sheet1', converters={
    'Jun-17': str,
    'Column One': str
})

方法3:读取后转换列类型

如果已经读取了数据,也可以事后将目标列转为字符串:

import pandas as pd
df = pd.read_excel('Sample.xlsx', sheet_name='Sheet1')
# 转换指定列为字符串
df['Jun-17'] = df['Jun-17'].astype(str)
# 验证类型
print(type(df['Jun-17'].iloc[0]))

内容的提问来源于stack exchange,提问作者Biggie Al

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:55:19