DataFrame.at报错:TypeError仅整数标量数组可转为标量索引解析
DataFrame.at 报错解释与解决:TypeError: only integer scalar arrays can be converted to a scalar index
一、报错的人话解释
这个错误的意思是:你想用df.at[row, col]定位表格里的某一个单元格数据,但你提供的列名(或行名)格式不对——程序把它识别成了一组字符串/数字的集合(数组),而不是单个能直接定位的标签,所以没法找到对应的单元格。
二、问题根源
看你的代码,创建DataFrame时犯了一个小错误:
df_total = pandas.DataFrame(columns=[colname], index=[indexnames], dtype=np.float64)
colname本身就是一个包含年份字符串的列表(比如['2013','2014',...]),你又给它套了一层方括号[colname],导致DataFrame的列变成了多层索引(MultiIndex),列标签不再是单个的'2013',而是数组类型的结构。而df.at方法只能接受单个的普通行/列标签,因此触发了报错。
同理,index=[indexnames]也犯了同样的错误,虽然没触发报错,但不符合规范。
三、解决方法
创建DataFrame时,去掉columns和index参数外层的方括号,直接传入列表即可:
df_total = pandas.DataFrame(columns=colname, index=indexnames, dtype=np.float64)
四、修复后的完整代码
import pandas import numpy as np from datetime import date, time, datetime def monthlyDT(firstidx, lastidx): print('entered downtimes()') print('\tthe first downtime timestamp = ' + str(DTs[firstidx])) print('\tthe last downtime timestamp = ' + str(DTs[lastidx])) print('row indices:\n' + str(df_total.index)) print('column headers: \n' + str(df_total.columns)) col = str(currentyr) print('col = ' + str(col)) row = str(currentmonth) + 'UTtotal' print('row = ' + str(row)) DTduration = df_total.at[row, col] print('row / col (' + str(row) + ' / ' + str(col) + ') =\n' + str(DTduration)) return() #setup working arrays to hold the datasets DTs = np.array([1.378854180000000000e+09, 1.378904520000000000e+09, 1.378957920000000000e+09, 1.378968180000000000e+09]) DTe = np.array([1.378858140000000000e+09, 1.378908000000000000e+09, 1.378958040000000000e+09, 1.378968240000000000e+09]) #build the 'year' column names array colname = [] y = 2013 currentyr = 2013 yrend = 2024 currentmonth = 9 while y <= yrend: colname.append(str(y)) y = y + 1 print('colname = ' + str(colname)) #create the index name array indexnames = ['UTtotal', 'DTtotal', 'Eventstotal', '1UTtotal', '1DTtotal', '1Eventstotal', '2UTtotal', '2DTtotal', '2Eventstotal', '3UTtotal', '3DTtotal', '3Eventstotal', '4UTtotal', '4DTtotal', '4Eventstotal', '5UTtotal', '5DTtotal', '5Eventstotal', '6UTtotal', '6DTtotal', '6Eventstotal', '7UTtotal', '7DTtotal', '7Eventstotal', '8UTtotal', '8DTtotal', '8Eventstotal', '9UTtotal', '9DTtotal', '9Eventstotal', '10UTtotal', '10DTtotal', '10Eventstotal', '11UTtotal', '11DTtotal', '11Eventstotal', '12UTtotal', '12DTtotal', '12Eventstotal' ] # 修复:去掉columns和index外层的方括号 df_total = pandas.DataFrame(columns=colname, index=indexnames, dtype=np.float64) print('df_total is:\n' + str(df_total)) df_total = df_total.fillna(-1) print('\n\ndf_total is:\n' + str(df_total) + '\n\n') monthlyDT(0, 3) print('end')
内容的提问来源于stack exchange,提问作者Jeff
相关产品推荐
相关产品推荐

