KeyError Pandas Dataframe(编码索引)
KeyError Pandas Dataframe (encoding index)
我是运行下面的代码。它创建了几个数据框,这些数据框采用另一个数据框中的列作为其索引,该列具有会议名称列表。
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
还是不行。
我知道它与编码有关,因为它总是在具有 non-ascii 个字符的索引处停止。
我正在使用 python 2.7
我认为问题所在:
for index, row in df_conf.iterrows():
row[0]=row[0].encode("utf-8")
它可能有效也可能无效,我很惊讶它没有发出警告。
除此之外,使用矢量化 str
method to encode
系列要快得多:
df_conf['col_name'] = df_conf['col_name'].str.encode('utf-8')
如果需要,您也可以用类似的方式对索引进行编码:
df.index = df.index.str.encode('utf-8')
它发生在代码最后一部分的行中吗?
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])
它会起作用的。 UTF8 中的数据帧索引以奇怪的方式工作,即使脚本是用“# -- coding:utf8 --”声明的。当您使用数据框列和索引与 utf8 字符串
时,只需将 "u" 放入 utf8 字符串中
我是运行下面的代码。它创建了几个数据框,这些数据框采用另一个数据框中的列作为其索引,该列具有会议名称列表。
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
还是不行。
我知道它与编码有关,因为它总是在具有 non-ascii 个字符的索引处停止。
我正在使用 python 2.7
我认为问题所在:
for index, row in df_conf.iterrows():
row[0]=row[0].encode("utf-8")
它可能有效也可能无效,我很惊讶它没有发出警告。
除此之外,使用矢量化 str
method to encode
系列要快得多:
df_conf['col_name'] = df_conf['col_name'].str.encode('utf-8')
如果需要,您也可以用类似的方式对索引进行编码:
df.index = df.index.str.encode('utf-8')
它发生在代码最后一部分的行中吗?
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])
它会起作用的。 UTF8 中的数据帧索引以奇怪的方式工作,即使脚本是用“# -- coding:utf8 --”声明的。当您使用数据框列和索引与 utf8 字符串
时,只需将 "u" 放入 utf8 字符串中