在旋转之后将NaN放在多列中

时间:2017-08-16 18:07:24

标签: python pandas

我需要调整一个类似于

的数据帧(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。 有没有一种解决这个问题的好方法?

2 个答案:

答案 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