如何将Pandas DataFrame地址列转换为列表并提取每行地址首段?
问题描述
现有如下DataFrame:
name address Wings 3109 N Main St, Hope Mills, NC 28348 Burger King 407 N Eastern Blvd, Fayetteville, NC 28301
想要提取address列中逗号前的地址首段内容(即3109 N Main St和407 N Eastern Blvd),但当前代码运行后只提取了每个地址的第一个字符:
df = pd.read_csv("mydataframe.csv") df['address'] = list(df['address']) df.loc[:, 'new_col'] = df.address.map(lambda x: x[0])
错误输出:
name address new_col Wings 3109 N Main St, Hope Mills, NC 28348 3 Burger King 407 N Eastern Blvd, Fayetteville, NC 28301 4
预期输出:
name address new_col Wings 3109 N Main St, Hope Mills, NC 28348 3109 N Main St Burger King 407 N Eastern Blvd, Fayetteville, NC 28301 407 N Eastern Blvd
解决方案
错误原因
你把address列转为列表的操作完全多余——原address列的每个元素本身就是字符串,转成列表后反而把单个字符串拆成了字符列表,所以x[0]取到的是字符串的第一个字符,而非地址首段。
正确实现方式
直接对原字符串进行分割,取逗号前的部分即可,以下两种方法都可行:
方法1:使用Pandas字符串分割方法
利用Pandas内置的str.split()处理字符串列,指定分隔符为逗号,取分割后的第一个元素:
df = pd.read_csv("mydataframe.csv") df['new_col'] = df['address'].str.split(',').str[0]
方法2:正则表达式提取
如果需要更精准的匹配(比如应对地址中可能出现的特殊逗号场景),可以用str.extract()提取逗号前的所有内容:
df = pd.read_csv("mydataframe.csv") df['new_col'] = df['address'].str.extract(r'^(.*?),')
两种方法都能得到预期的输出结果,且无需额外将列转为列表。
内容的提问来源于stack exchange,提问作者coding2
相关产品推荐
相关产品推荐

