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

2024-06-02 15:11:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为en_bal_df的数据帧,其结构如下:

  nrg_bal,siec,unit,geo\time       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\U bal、siec、unit、geo\time。我想使用逗号作为分隔符将其拆分为四列

我试过了

en_bal_df[['nrg_bal','siec','unit','NUTS-0']]=en_bal_df['nrg_bal,siec,unit,geo\time'].str.split(',',expand=True)

但我得到了以下错误代码:

Traceback (most recent call last):

  File "C:\Users\sand_jv\Desktop\Eurostat Datasets\untitled10.py", line 27, in <module>
    en_bal_df[['nrg_bal','siec','unit','NUTS-0']]=en_bal_df['nrg_bal,siec,unit,geo\time'].str.split(',',expand=True)

  File "C:\Users\sand_jv\Anaconda3\envs\myenv\lib\site-packages\pandas\core\frame.py", line 2902, in __getitem__
    indexer = self.columns.get_loc(key)

  File "C:\Users\sand_jv\Anaconda3\envs\myenv\lib\site-packages\pandas\core\indexes\base.py", line 2897, in get_loc
    raise KeyError(key) from err

KeyError: 'nrg_bal,siec,unit,geo\time'

然后我尝试用

en_bal_df_test=en_bal_df.rename(columns={'nrg_bal,siec,unit,geo\time':'info'},inplace=True)

我没有收到任何错误,但什么也没发生,列仍然有相同的名称。我认为这可能与名称中的反斜杠有关(nrg_bal、siec、unit、geo\time)。有没有办法解决这两个问题?提前谢谢


Tags: truedftimeunitusersfileengeo
2条回答

谢谢你,马辛!我认为问题出在“地理\时间”部分,这是欧盟统计局数据集编译器选择的一个不幸的名称。正如您所提到的,我尝试添加第二个反斜杠,现在拆分和重命名列都起作用了。我稍微修改了您的代码,以防其他人需要它:

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

Pandas不作为列名中的制表符\t进行分析

df1 = pd.DataFrame({'nrg_bal,siec,unit,geo\\time' : [1,2,3]})

df2 = pd.DataFrame({'nrg_bal,siec,unit,geo\time' : [1,2,3]})

请尝试打印列名。根据以下情况,在访问列名时必须使用\t\\t

print(df1.columns[0])

nrg_bal,siec,单位,地理时间

print(df2.columns[0])

nrg_bal,siec,单位,地理输入法

相关问题 更多 >