KeyError Pandas Dataframe(编码索引)

时间:2015-05-15 18:26:57

标签: python-2.7 indexing pandas encoding keyerror

我正在运行以下代码。它创建了一些数据框,这些数据框将另一个具有会议名称列表的数据框中的列作为其索引。

    df_conf = pd.read_sql("select distinct Conference from publications where year>=1991 and length(conference)>1 order by conference", db)

    for index, row in df_conf.iterrows():
            row[0]=row[0].encode("utf-8")

    df2= pd.DataFrame(index=df_conf['Conference'], columns=['Citation1991','Citation1992'])

    df2 = df2.fillna(0)
    df_if= pd.DataFrame(index=df_conf['Conference'], columns=['IF1994','IF1995'])

    df_if = df_if.fillna(0)

    df_pubs=pd.read_sql("select Conference, Year, count(*) as totalPubs from publications where year>=1991 group by conference, year", db)

    for index, row in df_pubs.iterrows():
        row[0]=row[0].encode("utf-8")

    df_pubs= df_pubs.pivot(index='Conference', columns='Year', values='totalPubs')
    df_pubs.fillna(0)

    for index, row in df2.iterrows():
        df_if.ix[index,'IF1994'] = df2.ix[index,'Citation1992'] / (df_pubs.ix[index,1992]+df_pubs.ix[index,1993])

最后一行不断给我以下错误:

KeyError: 'Analyse dynamischer Systeme in Medizin, Biologie und \xc3\x96kologie'

不太确定我做错了什么。我试过编码索引。它不会起作用。我甚至试过.at仍然不会'工作

我知道它与编码有关,因为它总是在带有非ascii字符的索引处停止。

我正在使用python 2.7

2 个答案:

答案 0 :(得分:1)

我认为这个问题:

for index, row in df_conf.iterrows():
    row[0]=row[0].encode("utf-8")

它可能会也可能不会起作用,我很惊讶它没有发出警告。

除此之外,使用向量化str方法更快地将encode系列用于{{3}}系列:

df_conf['col_name'] = df_conf['col_name'].str.encode('utf-8')

如果需要,您还可以以类似的方式对索引进行编码:

df.index = df.index.str.encode('utf-8')

答案 1 :(得分:0)

它发生在代码的最后一行吗?

df_if.ix[index,'IF1994'] = df2.ix[index,'Citation1992'] / (df_pubs.ix[index,1992]+df_pubs.ix[index,1993])

如果这样,请尝试

df_if.ix[index,u'IF1994'] = df2.ix[index,u'Citation1992'] / (df_pubs.ix[index,1992]+df_pubs.ix[index,1993])

它将起作用。即使脚本用“#--encoding:utf8--”声明,UTF8中的数据帧索引也以奇怪的方式工作。当您使用数据框列并使用utf8字符串建立索引时,只需在utf8字符串中放入“ u”