我们可以在数据帧上的操作符链接中添加用户定义的函数吗?

2024-04-26 10:42:00 发布

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

我定义了一个函数:

   def keep_alphabets(name):
       energy[name] = energy[name].map(lambda x : ' '.join([re.sub('[^A-Za-z]','',w) for w in x.split()]))

我有一个使用操作符链接的现有数据帧。你知道吗

   energy = (pd.read_excel('Energy Indicators.xls',skiprows=17, skip_footer=0,na_values='...')
      .drop(['Unnamed: 0','Unnamed: 1'], axis=1)
      .rename(columns = {'Unnamed: 2' : 'Country','Petajoules' : 'Energy Supply','Gigajoules' : 'Energy Supply per Capita',
                          '%' : '% Renewable'})
      .replace({'Country':{"Republic of Korea": "South Korea",
                           "United States of America": "United States",
                           "United Kingdom of Great Britain and Northern Ireland": "United Kingdom",
                           "China, Hong Kong Special Administrative Region3": "Hong Kong"}})
      .head(227))

我可以在这里添加keep\ u alphabets函数吗?你知道吗


Tags: of函数namecountryunitedkingdomenergyhong
3条回答

IIUC最后一步应该是apply,如果需要对df的每一列使用lambda函数:

.apply(lambda x : ' '.join([re.sub('[^A-Za-z]','',w) for w in x.split()]), axis=1)

您可以执行以下操作。。你知道吗

# for single elements
def keep_alphabets_elem(s):
    return ' '.join([re.sub('[^A-Za-z]','',w) for w in s.split()]))

energy = (pd.read_excel('Energy Indicators.xls',skiprows=17, skip_footer=0,na_values='...')
  .drop(['Unnamed: 0','Unnamed: 1'], axis=1)
  .rename(columns = {'Unnamed: 2' : 'Country','Petajoules' : 'Energy Supply','Gigajoules' : 'Energy Supply per Capita',
                      '%' : '% Renewable'})
  .replace({'Country':{"Republic of Korea": "South Korea",
                       "United States of America": "United States",
                       "United Kingdom of Great Britain and Northern Ireland": "United Kingdom",
                       "China, Hong Kong Special Administrative Region3": "Hong Kong"}})
  .apply(lambda x: keep_alphabets_elem(x['COL_NAME'], axis=1) # NEW
  .head(227))

请注意,需要使用axis=1对行而不是列执行此操作。你知道吗

如果只想修改一个名为'col'的列:

.assign(col=energy['col'].map(func))

其中func是您定义的lambda函数:

def func(x):
    return ' '.join([re.sub('[^A-Za-z]','',w) for w in x.split()])

如果要将列名放入变量name='col'

.assign(**{name: energy[name].map(func)})

相关问题 更多 >