我主要是R用户,但我在某些用例中切换到Python,我有非常琐碎的任务要做,这涉及到清理值/数据准备。
我有一个带有原始格式的值的dataframe,并且基于这些值,我希望使用像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中使用某些类型的apply / lambda函数?
我也希望得到一些解释,说明为什么它在R中工作,而不是在Python中工作,或者我做的不正确。
发布于 2017-06-02 10:56:53
我们可以使用Series.str.split()方法,然后使用.str[0]访问器访问每个行的列表的第一个元素。
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: objecthttps://stackoverflow.com/questions/44327175
复制相似问题