Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我们可以在数据帧上的运算符链接中添加用户定义的函数吗?_Python_Pandas - Fatal编程技术网

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

Python 我们可以在数据帧上的运算符链接中添加用户定义的函数吗?,python,pandas,Python,Pandas,我定义了一个函数: 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_valu

我定义了一个函数:

   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_alphabets函数吗?

IIUC的最后一步应该是
应用
,如果需要,对
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))
.assign(**{name: energy[name].map(func)})
其中
func
是您定义的lambda函数:

def func(x):
    return ' '.join([re.sub('[^A-Za-z]','',w) for w in x.split()])
如果要将列名放入变量
name='col'

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

您可以使用
df.apply(func_name)
…使用
df.apply
并传递
lambda
name
参数是什么?参数将是数据库中的一列,格式为系列@i是要以这种方式修改的单个列,还是所有列?