使用Pandas DataFrame无法获取指定格式数据的问题排查
问题解决:Pandas提取数据的日期格式与多余方括号问题
问题根源
你的代码里用了iloc[[linha],[col]]这种双重方括号索引,返回的是二维DataFrame切片,再用.values[0]拿到的是一维数组(比如[Timestamp('1977-01-26 00:00:00')]),不是单个标量值——这就是导出后出现Timestamp格式字符串和多余方括号的核心原因。
解决方案
把所有iloc[[行号],[列号]].values[0]的写法改成iloc[行号, 列号],直接提取单个标量值,同时确保日期被正确识别为Pandas的日期类型。
修正后的代码
linha = 0 # 先初始化空DataFrame,指定列名 df = pd.DataFrame(columns=['Cod_turma', 'Cod_curso', 'Matricula', 'Nome', 'Data', 'Telefone', 'CEP', 'Cidade', 'Estado', 'Situacao', 'Email']) while True: if not pd.isna(dataframe.iloc[linha, 1]): cod_turma = dataframe.iloc[linha, 0] cod_curso = dataframe.iloc[linha, 1] linha += 1 else: matricula = dataframe.iloc[linha, 0] nome = dataframe.iloc[linha, 2] # 若原数据是字符串日期,可加pd.to_datetime转换确保类型正确 data = dataframe.iloc[linha+1, 0] telefone = dataframe.iloc[linha+1, 2] cep = dataframe.iloc[linha+1, 6] cidade = dataframe.iloc[linha+2, 4] estado = dataframe.iloc[linha+2, 8] situacaomatricula = dataframe.iloc[linha+2, 0] email = dataframe.iloc[linha+3, 0] df = df.append({ 'Cod_turma': cod_turma, 'Cod_curso': cod_curso, 'Matricula': matricula, 'Nome': nome, 'Data': data, 'Telefone': telefone, 'CEP': cep, 'Cidade': cidade, 'Estado': estado, 'Situacao': situacaomatricula, 'Email': email }, ignore_index=True) linha += 4 if linha == 254: break
额外优化建议
- 若原表格日期是纯字符串,提取时强制转换为日期类型:
data = pd.to_datetime(dataframe.iloc[linha+1, 0]),导出Excel时会自动识别为日期格式,而非文本。 - 推荐用
pd.concat替代已弃用的df.append,数据量较大时效率更高:# 初始化列表存储行数据 rows_list = [] # 循环中把每行字典加入列表 rows_list.append({...}) # 循环结束后生成DataFrame df = pd.DataFrame(rows_list)
内容的提问来源于stack exchange,提问作者Thiago Ribeiro
相关产品推荐
相关产品推荐

