首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从修改值的旧列中在dataframe中创建新列的最简单逻辑是什么?

从修改值的旧列中在dataframe中创建新列的最简单逻辑是什么?
EN

Stack Overflow用户
提问于 2017-06-02 10:53:17
回答 2查看 204关注 0票数 2

我主要是R用户,但我在某些用例中切换到Python,我有非常琐碎的任务要做,这涉及到清理值/数据准备。

我有一个带有原始格式的值的dataframe,并且基于这些值,我希望使用像string.replace()这样的函数来创建一个包含干净值的新列。

让我们创建一个虚拟表:

代码语言:javascript
复制
import pandas as pd
dummy_table = pd.DataFrame(data = ["London - City", "Manchester - City"], columns = ["City_raw"])

dummy_table
           City_raw
0      London - City
1  Manchester - City

在R中,我将使用一个非常简单和直观的逻辑来创建一个新列,并修改原值。

代码语言:javascript
复制
dummy_table$City_clean <- gsub(" - City", "", dummy_table$City_raw)

其结果将是:

代码语言:javascript
复制
       City_raw       City_clean
0  London - City      London
1  Manchester - City  Manchester

我想保持这两列,原始和新修改。我尝试的是在Python中使用这个语法:

代码语言:javascript
复制
dummy_table['City_clean'] = dummy_table['City_raw'].replace(" - City",  "", inplace = False)

但是,生成的表具有与原始列相同的值的新列,这意味着没有进行替换,只复制值。

代码语言:javascript
复制
       City_raw       City_clean
0  London - City      London - City 
1  Manchester - City  Manchester - City

我的问题是:是否有一些简单明了的语法,可以对列执行向量化(对列的所有值进行操作)操作,并创建一个新列,还是需要在Python中使用某些类型的apply / lambda函数?

我也希望得到一些解释,说明为什么它在R中工作,而不是在Python中工作,或者我做的不正确。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-02 10:55:42

需要在regex=True中使用replace

代码语言:javascript
复制
dummy_table['City_clean'] = dummy_table['City_raw'].replace(" - City",  "", regex = True)
print (dummy_table)
            City_raw  City_clean
0      London - City      London
1  Manchester - City  Manchester

或更好:

代码语言:javascript
复制
dummy_table['City_clean'] = dummy_table['City_raw'].replace("\s*-\s*City",  "", regex = True)
print (dummy_table)
            City_raw  City_clean
0      London - City      London
1  Manchester - City  Manchester
票数 5
EN

Stack Overflow用户

发布于 2017-06-02 10:56:53

我们可以使用Series.str.split()方法,然后使用.str[0]访问器访问每个行的列表的第一个元素。

代码语言:javascript
复制
In [43]: dummy_table['City_clean'] = dummy_table.City_raw.str.split('\s*-\s*').str[0]

In [44]: dummy_table
Out[44]:
            City_raw  City_clean
0      London - City      London
1  Manchester - City  Manchester

一步步地:

代码语言:javascript
复制
In [50]: dummy_table.City_raw.str.split('\s*-\s*')
Out[50]:
0        [London, City]
1    [Manchester, City]
Name: City_raw, dtype: object

In [51]: dummy_table.City_raw.str.split('\s*-\s*').str[0]
Out[51]:
0        London
1    Manchester
Name: City_raw, dtype: object
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44327175

复制
相关文章

相似问题

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