我需要调整一个类似于
的数据帧(dfM)Task Question Answer analystID
x a 1 u
y b 2 i
z c 3 o
我想透视它,以便分析师ID是标题,答案是标题下填充的内容,任务和问题作为索引。 最初我试过
dfM['Answer'] = pd.to_numeric(dfM['Answer'], errors='coerce')
dfP = pd.pivot_table(dfM, index = ['Task', 'Question'], columns = 'analystID',
values = ['Answer'])
因为我得到一个No Numeric Types来聚合错误,但现在所有应该在头文件下面的Answers都是NaN。 有没有一种解决这个问题的好方法?
答案 0 :(得分:0)
可能存在多个问题。
<强> 1 强>
用数字尾随空格。
解决方案是strip
:
dfM['Answer'] = pd.to_numeric(dfM['Answer'].str.strip(), errors='coerce')
<强> 2 强>
浮点数中的一些;
代替.
:
解决方案是replace with points。
第3 强>
如果doest什么都不工作,请尝试手动检查值并检查数字:
print (dfM['Answer'].tolist())
答案 1 :(得分:0)
您可以通过一种方式查看“答案”栏中的问题,
是找到字符串中不是数字的字母
dfm= pd.DataFrame({'Answer': ['1', '2 ', '3o', '1,000']})
def find_non_num(x):
uniq= set(str(x))
nums= set(['1','2','3','4','5','6','7','8','9','0'])
return uniq - nums
dfm.Answer.apply(find_non_num) #optional .unique()
#the output will be:
#0 {}
#1 { }
#2 {o}
#3 {,}
通过这种方式,你可以看到发生了什么使你的NaN出现了
此外,您可以使用.unique()
方法查找有哪些类型的错误,
和布尔索引,以查看哪些行有什么问题以及它是如何表现的
dfm.Answer[dfm.Answer.str.find('o') > -1] #returns Series of [3o] with index 2