我正在尝试使用以下代码替换“国家/地区名称”中的括号,其中“国家/地区”是DataFrame的索引:
energy['Country'] = energy['Country'].str.replace(r"\s+\(.*\)","")
我在各处都尝试过变体,但是无论如何我都会遇到以下错误:
KeyError Traceback (most recent call last)
/opt/conda/lib/python3.6/site-packages/pandas/indexes/base.py in get_loc(self, key, method, tolerance)
2133 try:
-> 2134 return self._engine.get_loc(key)
2135 except KeyError:
其次是:
KeyError: 'Country'
During handling of the above exception, another exception occurred:
KeyError Traceback (most recent call last)
<ipython-input-45-740ea96e825f> in <module>()
23
24 #energy['Country'] = energy['Country'].str.replace("A","B")
---> 25 energy['Country'] = energy['Country'].str.replace(r"\s+\(.*\)","")
26
27 #energy['Country'] = energy['Country']
,然后继续进行。
有人可以解释该错误以及我需要纠正什么吗?
谢谢。
答案 0 :(得分:1)
如果索引中包含“国家/地区”,则无法使用df['Country']
语法访问它。这仅适用于表列。但是,您还有其他选择。
我使用以下测试DataFrame
来简化操作。
df = pd.DataFrame([('abb', 1, 2), ('abc', 2, 4), ('abd', 3, 7), ('abe', 4, 8), ('abg', 5, 6), ('abh', 6, 3)], columns=['Country', 'b', 'c'])
如果“国家”在索引(和单级索引)中,则可以执行以下替换。请注意,这在MultiIndex
上将不起作用。
df = df.set_index('Country')
df.index = df.index.str.replace(r"a","")
或者,您可以使用.reset_index
将所有内容移出索引,然后移回列。然后,您可以根据需要进行索引。
df = df.set_index(['Country', 'b']) # Move 2 columns into the index.
df = df.reset_index() # Country & b are now back out of the index, as a normal columns.
df['Country'] = df['Country'].str.replace(r"a","") # Normal indexing works.
在两种情况下,您都应该获得以下输出
Country b c
0 bb 1 2
1 bc 2 4
2 bd 3 7
3 be 4 8
4 bg 5 6
5 bh 6 3