如何将Pandas DataFrame列中的Python列表转换为CSV格式列表?
解决Pandas DataFrame中列表转CSV格式字符串的问题
问题场景
现有一个Pandas DataFrame,City列存储Python Unicode列表或None,示例数据如下:
| State | City |
|---|---|
| Oregon | [u'Eugen', u'Portland'] |
| New York | [u'New Jersey', u'Buffalo'] |
| Utah | [u'Salt Lake CIty'] |
| Texas | None |
需要将City列转换为带单引号的CSV格式字符串,处理后结果如下:
| State | Cities |
|---|---|
| Oregon | 'Eugen', 'Portland' |
| New York | 'New Jersey', 'Buffalo' |
| Utah | 'Salt Lake CIty' |
| Texas |
需兼容None值、单元素列表等边界情况,数据量超1700条,需高效实现。
原代码问题分析
你之前尝试的代码:
df['Cities'] = ','.join(str(row) for row in df['cities'])
错误原因是:该代码是将整个City列的每一行(每个列表对象)转成字符串后拼接,而非对每个列表内部的元素进行格式化,因此会得到所有列表字符串的拼接结果,而非目标格式。
解决方案
使用pandas.Series.apply()方法,配合自定义函数逐个处理每行的City值:
import pandas as pd # 示例数据 data = { 'State': ['Oregon', 'New York', 'Utah', 'Texas'], 'City': [[u'Eugen', u'Portland'], [u'New Jersey', u'Buffalo'], [u'Salt Lake CIty'], None] } df = pd.DataFrame(data) # 定义格式化函数 def format_cities(city_list): if city_list is None: return '' # 若需要保留None可改为return None # 给每个城市名加单引号,再用逗号加空格连接 return ', '.join(f"'{city}'" for city in city_list) # 应用到City列,生成新的Cities列 df['Cities'] = df['City'].apply(format_cities) # 查看结果 print(df[['State', 'Cities']])
效果说明
- 当
City为None时,返回空字符串(可根据需求修改为None) - 单元素列表会直接输出带单引号的单个城市名
- 多元素列表会输出用
,分隔、每个元素带单引号的格式 apply()方法逐行处理,1700条数据的规模完全适用
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

