Ste*_*anK 2 python dataframe pandas
我主要是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
Run Code Online (Sandbox Code Playgroud)
在R中,我将使用一个非常简单和直接的逻辑来创建一个具有修改原始值的新列.
dummy_table$City_clean <- gsub(" - City", "", dummy_table$City_raw)
Run Code Online (Sandbox Code Playgroud)
结果将是:
City_raw City_clean
0 London - City London
1 Manchester - City Manchester
Run Code Online (Sandbox Code Playgroud)
我想保留两个列,原始和新的修改.我试过在Python中使用这种语法:
dummy_table['City_clean'] = dummy_table['City_raw'].replace(" - City", "", inplace = False)
Run Code Online (Sandbox Code Playgroud)
但是结果表的新列具有与原始列相同的值,这意味着没有替换完成,只复制值.
City_raw City_clean
0 London - City London - City
1 Manchester - City Manchester - City
Run Code Online (Sandbox Code Playgroud)
我的问题是:是否有一些简单直接的语法可以对列进行矢量化(对列的所有值进行操作)操作并创建一个新列,或者我是否需要在Python中使用某些应用/ lambda函数?
我也很感激为什么它在R中工作而不是在Python中工作,或者我在做错误的工作.
需要regex=True在replace:
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
Run Code Online (Sandbox Code Playgroud)
或更好:
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
Run Code Online (Sandbox Code Playgroud)
我们可以使用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
Run Code Online (Sandbox Code Playgroud)
一步步:
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
Run Code Online (Sandbox Code Playgroud)