代码之家  ›  专栏  ›  技术社区  ›  BruceWayne

panda和lambda-字符串索引必须是整数

  •  3
  • BruceWayne  · 技术社区  · 6 年前

    我有一个数据框架,一列是URL,另一列是名称。我只想添加第三列,它获取URL,并创建一个HTML链接。

    专栏 newsSource 具有链接名称,并且 url 有URL。对于数据帧中的每一行,我要创建一个列,该列具有:

    <a href="[the url]">[newsSource name]</a>
    

    尝试下面的操作会引发错误

    文件“c:\users\awesomeman\documents\python\misc\news alerts\simple\u news.py”,第254行,in df['sourceurl']=df['url'].应用(lambda x:'1'。格式(x,x[0]['newsource']))
    类型错误:字符串索引必须是整数

    df['sourceURL'] = df['url'].apply(lambda x: '<a href="{0}">{1}</a>'.format(x, x['source']))
    

    但我已经用过 x[colName] 以前?下面的行工作正常,它只创建源名称的列:

    df['newsSource'] = df['source'].apply(lambda x: x['name'])
    

    为什么突然(“突然”对我)说我不能访问指数?

    2 回复  |  直到 6 年前
        1
  •  2
  •   jpp    6 年前

    pd.Series.apply lambda df['source']

    pd.DataFrame.apply axis=1

    def return_link(x):
        return '<a href="{0}">{1}</a>'.format(x['url'], x['source'])
    
    df['sourceURL'] = df.apply(return_link, axis=1)
    

    df['sourceURL'] = ['<a href="{0}">{1}</a>'.format(i, j) \
                       for i, j in zip(df['url'], df['source'])]
    

    df = pd.DataFrame([['BBC', 'http://www.bbc.o.uk']],
                      columns=['source', 'url'])
    
    def return_link(x):
        return '<a href="{0}">{1}</a>'.format(x['url'], x['source'])
    
    df['sourceURL'] = df.apply(return_link, axis=1)
    
    print(df)
    
      source                  url                              sourceURL
    0    BBC  http://www.bbc.o.uk  <a href="http://www.bbc.o.uk">BBC</a>
    
        2
  •  2
  •   BENY    6 年前

    df['sourceURL'] = ['<a href="%s.">%s.</a>' % (x,y) for x , y in zip (df['url'], df['source'])]
    

    f-string

    [f'<a href="{x}">{y}</a>' for x , y in zip ((df['url'], df['source'])]