首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将函数应用于熊猫数据栏中的每个值?

如何将函数应用于熊猫数据栏中的每个值?
EN

Stack Overflow用户
提问于 2016-07-25 04:54:37
回答 2查看 187关注 0票数 1

我尝试过使用下面这样的循环来进行某种程度的手动方法:

代码语言:javascript
运行
复制
data = pd.read_csv('data/training.csv')
for idx,imageString in enumerate(data.iloc[:,-1]):
    # print(imageString[0:10])
    data[idx,-1] = imageString.split(" ")

但是,这个错误出现在最后一行:

ValueError:值的长度与索引长度不匹配

所以我的问题是:

  1. 有人能解释我为什么会犯上述错误吗?我该如何避免呢?
  2. 这是将split应用于数据帧最后一列中的每个值的正确方法吗?

关于#2 -我看到一些人使用applymap,但我认为这会创建一个新的列,我只是想用另一个列表替换现有列中的值。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-25 04:58:30

我想你需要str.split

代码语言:javascript
运行
复制
data = pd.read_csv('data/training.csv')
data.iloc[:,-1] = data.iloc[:,-1].str.split(expand=False)

然后使用str[1]str[n]选择列表的第一个或其他元素

代码语言:javascript
运行
复制
data.iloc[:,-1] = data.iloc[:,-1].str.split(expand=False).str[0]
data.iloc[:,-1] = data.iloc[:,-1].str.split(expand=False).str[n]

示例:

代码语言:javascript
运行
复制
import pandas as pd

data = pd.DataFrame({'A':[1,2,3],
                   'B':[4,5,6],
                   'C':[7,8,9],
                   'D':[1,3,5],
                   'E':[5,3,6],
                   'F':['aa aa','ss uu','ee tt']})

print (data)
   A  B  C  D  E      F
0  1  4  7  1  5  aa aa
1  2  5  8  3  3  ss uu
2  3  6  9  5  6  ee tt

print (data.iloc[:,-1].str.split(expand=False))
0    [aa, aa]
1    [ss, uu]
2    [ee, tt]
Name: F, dtype: object

data.iloc[:,-1] = data.iloc[:,-1].str.split(expand=False).str[0]
print (data)
   A  B  C  D  E   F
0  1  4  7  1  5  aa
1  2  5  8  3  3  ss
2  3  6  9  5  6  ee
代码语言:javascript
运行
复制
data.iloc[:,-1] = data.iloc[:,-1].str.split(expand=False).str[1]
print (data)
   A  B  C  D  E   F
0  1  4  7  1  5  aa
1  2  5  8  3  3  uu
2  3  6  9  5  6  tt

有人能解释我为什么会犯上述错误吗?我该如何避免呢?

问题是imageString.split(" ")返回list,如果将字符串赋值给data[idx,-1],则字符串元素的长度小于所有DataFrame的长度。

这是对数据帧最后一列中的每个值应用拆分的正确方法吗?

最好是使用字符串方法,参见熊猫文献

票数 2
EN

Stack Overflow用户

发布于 2016-07-25 05:27:22

您没有正确地访问这些值。

要更正代码,最后一行应该是:

代码语言:javascript
运行
复制
df.iat[idx, -1] = imageString.split(" ")

iat用于标量获取和设置。

这可能是实现您的目标的更简单的方法:

代码语言:javascript
运行
复制
df.iloc[:, -1] = df.iloc[:, -1].str.split()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38559967

复制
相关文章

相似问题

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