我有一个名为en_bal_df的数据帧,具有以下结构:
nrg_bal,siec,unit,geotime 2018 ... 1991 1990
0 AFC,BIOE,GWH,AL 3129.617 ... 4221.944 4221.944
1 AFC,BIOE,GWH,AT 55305.885 ... 27905.111 25744.633
2 AFC,BIOE,GWH,BA 13379.486 ... : :
3 AFC,BIOE,GWH,BE 27929.856 ... 4108.185 4034.103
4 AFC,BIOE,GWH,BG 16312.768 ... 1333.333 2005.833
第一列称为nrg_bal、siec、unit、geo\time。我想用逗号作为分隔符将它分成四列。
我试过
en_bal_df[['nrg_bal','siec','unit','NUTS-0']]=en_bal_df['nrg_bal,siec,unit,geotime'].str.split(',',expand=True)
但我得到了以下错误代码:
Traceback (most recent call last):
File "C:Userssand_jvDesktopEurostat Datasetsuntitled10.py", line 27, in <module>
en_bal_df[['nrg_bal','siec','unit','NUTS-0']]=en_bal_df['nrg_bal,siec,unit,geotime'].str.split(',',expand=True)
File "C:Userssand_jvAnaconda3envsmyenvlibsite-packagespandascoreframe.py", line 2902, in __getitem__
indexer = self.columns.get_loc(key)
File "C:Userssand_jvAnaconda3envsmyenvlibsite-packagespandascoreindexesbase.py", line 2897, in get_loc
raise KeyError(key) from err
KeyError: 'nrg_bal,siec,unit,geotime'
然后我试着用重新命名这个列
en_bal_df_test=en_bal_df.rename(columns={'nrg_bal,siec,unit,geotime':'info'},inplace=True)
我没有得到任何错误,但什么也没发生,列仍然有相同的名称。我认为这可能与名称中的反斜杠有关(nrg_bal、siec、unit、geo\time(。有什么想法可以解决这两个问题吗?提前谢谢。
Pandas不将列名称中的制表符解析为\t
df1 = pd.DataFrame({'nrg_bal,siec,unit,geo\time' : [1,2,3]})
df2 = pd.DataFrame({'nrg_bal,siec,unit,geotime' : [1,2,3]})
请尝试打印列名。根据以下情况,访问列名时必须使用t
或\t
:
print(df1.columns[0])
nrg_bal,siec,单位,地理\时间
print(df2.columns[0])
nrg_bal,siec,单位,地理时间
谢谢你,Marcin!我以为问题出在";地理\时间";部分,欧盟统计局数据集编译器的一个不幸的名称选择。正如您所提到的,我尝试添加第二个反斜杠,现在拆分和重命名列都起作用了。我修改了你的代码,以防其他人需要:
import pandas as pd
df1 = pd.DataFrame({'nrg_bal,siec,unit,geo\time' : ['1,a,b,c','2,d,e,f','3,g,h,i']})
df2 = pd.DataFrame({'nrg_bal,siec,unit,geo\time' : [1,2,3]})
df1[['nrg_bal','siec','unit','NUTS-0']]=df1['nrg_bal,siec,unit,geo\time'].str.split(',',expand=True)
df1.drop(columns={'nrg_bal,siec,unit,geo\time'},inplace=True)
df2.rename(columns={'nrg_bal,siec,unit,geo\time':'info'},inplace=True)
输出为:
df1.head()
Out[10]:
nrg_bal siec unit NUTS-0
0 1 a b c
1 2 d e f
2 3 g h i
df2.head()
Out[11]:
info
0 1
1 2
2 3