使用python将项目从现有列剥离到新列
python新手。我想从DF列中删除名称。 我正在循环浏览列中列表中的每一项,但在大尺寸CSV上执行此操作的可接受方式是什么 输入DF:使用python将项目从现有列剥离到新列,python,pandas,dataframe,Python,Pandas,Dataframe,python新手。我想从DF列中删除名称。 我正在循环浏览列中列表中的每一项,但在大尺寸CSV上执行此操作的可接受方式是什么 输入DF: Entity Details 0 Entity1 street=First,name=John,postcode=123 1 Entity2 name=Billy 2 Entity3 stre
Entity Details
0 Entity1 street=First,name=John,postcode=123
1 Entity2 name=Billy
2 Entity3 street=Second,interest=walking,name=Julian
3 Entity4
代码:
输出DF:
Entity Details Name
0 Entity1 [street=First, name=John, postcode=123] John
1 Entity2 [name=Billy] Billy
2 Entity3 [street=Second, interest=walking, name=Julian] Julian
3 Entity4 [] NaN
下面是如何使用正则表达式提取来获取名称
df['name'] = df['Details'].str.extract(r'name=(\w+)')
这给
Entity Details name
0 Entity1 street=First,name=John,postcode=123 John
1 Entity2 name=Billy Billy
2 Entity3 street=Second,interest=walking,name=Julian Julian
3 Entity4 NaN
我通常使用apply()
函数结合单独的定义来处理数据列
下面我使用re
将Details
字符串拆分为列,以提取name
值
import re
def get_name(row):
it=iter(re.split(',|=',row))
name_val = [next(it) for x in it if x=='name']
if name_val:
return name_val[0]
else:
return []
df['Name']=df['Details'].apply(lambda row:get_name(row))
输出
import re
def get_name(row):
it=iter(re.split(',|=',row))
name_val = [next(it) for x in it if x=='name']
if name_val:
return name_val[0]
else:
return []
df['Name']=df['Details'].apply(lambda row:get_name(row))
Entity Details Name
0 Entity1 street=First,name=John,postcode=123 John
1 Entity2 name=Billy Billy
2 Entity3 street=Second,interest=walking,name=Julian Julian
3 Entity4 []