无法拆分或重命名熊猫数据框中的列



我有一个名为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

最新更新