从旧列修改值的数据框中创建新列的最简单逻辑是什么?

时间:2017-06-02 10:53:18

标签: python pandas dataframe

我主要是R用户,但我在某些用例中切换到Python,而且我还有一个非常简单的任务,那就是清理值/数据准备。

我有一个数据框,其值为原始格式并且基于值,我想创建一个具有干净值的新列,使用像string.replace()这样的函数

让我们创建一个虚拟表:

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中,我将使用一个非常简单和直接的逻辑来创建一个具有修改原始值的新列。

dummy_table$City_clean <- gsub(" - City", "", dummy_table$City_raw)

结果将是:

       City_raw       City_clean
0  London - City      London
1  Manchester - City  Manchester

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

dummy_table['City_clean'] = dummy_table['City_raw'].replace(" - City",  "", inplace = False)

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

       City_raw       City_clean
0  London - City      London - City 
1  Manchester - City  Manchester - City

我的问题是:是否有一些简单直接的语法可以对列进行矢量化(对列的所有值进行操作)操作并创建一个新列,或者我是否需要在Python中使用并使用某种应用/ lambda函数?

我也很感激为什么它在R中工作而不在Python中工作,或者我在做错误的工作。

2 个答案:

答案 0 :(得分:5)

replace中需要regex=True

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

或更好:

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

答案 1 :(得分:5)

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

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

一步一步:

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