首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >熊猫分别在两个字符串列中的每一个上()工作,而不是在一起。

熊猫分别在两个字符串列中的每一个上()工作,而不是在一起。
EN

Stack Overflow用户
提问于 2018-05-31 19:27:37
回答 2查看 3.1K关注 0票数 2

我有一个简单的数据框架,大致如下:

代码语言:javascript
复制
    a       b
 0  horse  cat
 1  dog    elephant

跑步:

代码语言:javascript
复制
df.loc[:,'a'].apply(lambda x: x.upper())

代码语言:javascript
复制
df.loc[:,'b'].apply(lambda x: x.upper())

获取相应列中的动物。然而,运行

代码语言:javascript
复制
df.loc[:,'a':'b'].apply(lambda x: x.upper())

代码语言:javascript
复制
df.loc[:,['a','b']].apply(lambda x: x.upper())

结果在"AttributeError:("'Series‘对象没有属性'upper'",’发生在索引‘’)“。

显然,我想知道如何修复它(即,能够同时大写两列)。但是,我也想知道一个列如何能够自己拥有属性'upper‘,但是当lambda作为多列的一部分应用到它时,它就会丢失。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-31 19:32:09

使用str访问器:

代码语言:javascript
复制
df.loc[:,'a':'b'].apply(lambda x: x.str.upper())

OUtput:

代码语言:javascript
复制
       a         b
0  HORSE       CAT
1    DOG  ELEPHANT

这里发生什么事情?

好的,让我们做一个小小的调试:

代码语言:javascript
复制
def f(x):
    print(type(x))
    print(type(x[0]))

df.loc[:,'a':'b'].apply(f)

输出:

代码语言:javascript
复制
<class 'pandas.core.series.Series'>
<class 'str'>
<class 'pandas.core.series.Series'>
<class 'str'>

这里我们使用的是pd.DataFrame.apply

在这种情况下,熊猫系列传递给函数f,因此我们可以使用.str访问器调用string函数。

现在,让我们看一下第一种情况:

代码语言:javascript
复制
def f(x):
    print(type(x))
    print(type(x[0]))

df.loc[:,'a'].apply(f)

输出:

代码语言:javascript
复制
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>

在这里,are使用pd.Series.apply并传递每个值本身。因此,我们可以直接在每个值上调用string函数。

而且,您还可以在解决方案中使用pd.DataFrame.applymap作为@chrisz shows将数据的每个单元格值传递给函数。

票数 6
EN

Stack Overflow用户

发布于 2018-05-31 19:30:40

使用applymap以便:

向DataFrame应用一个函数,该函数的目的是按元素操作,例如对DataFrame中的每个系列执行映射(func,series)

代码语言:javascript
复制
df[['a', 'b']].applymap(lambda x: x.upper())

       a         b
0  HORSE       CAT
1    DOG  ELEPHANT
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50631468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档