Python Pandas DataFrame列表类型列str.replace替换不生效问题咨询
问题原因
你当前test_set列存储的是Python列表类型对象,并非字符串,你之前尝试的所有replace方法都是针对字符串值生效的,自然不会起作用。
另外你提供的测试数据构造代码里,每个子列表末尾漏了逗号,直接运行会报语法错误,下面的代码已经做了补全。
正确实现方案
你要把列表元素拼接为|分隔的字符串,不需要做字符替换,直接对列表执行join操作即可,这也是最稳妥的方案,不会误替换元素内部自带的逗号(比如你数据里的1630,51的逗号就不会被改动):
import pandas as pd my_list = [ ['1001100', 'xxx', '', '1100', 'PAR_200', '21651947694', '0', '0', '20210301', '20210331', '1630,51', '1', ''], ['1001110', 'sss', '', '1110', 'C-200', '20210307', '1630,51', '1', '7252048000136', ''], ['1001115', 'ddd', '', '1115', '21', '', 'NO6520058050362', '0', '08', '110433', '1630,51', '1', '', ''], ['1001120', 'fff', '', '1120', 'MG', '', '', '73895137480', ''], ['101100', 'ees', '', '1100', 'PAR_200', '21653346587', '0', '0', '20210301', '20210331', '1013,84', '1', ''], ['101110', 'fsc', '', '1110', 'C-200', '20210307', '1013,84', '1', '7252048000136', ''], ['101115', 'fer', '', '1115', '1', '', 'LI1600081181694N2K346', '0', '06', '110433', '1013,84', '1', '', ''], ['101120', 'ter', '', '1120', 'MG', '', '', '17651232321', ''] ] df1 = pd.DataFrame({'test_set': my_list}) # 核心转换逻辑:把每个列表拼接成|分隔的字符串 df1['test_set'] = df1['test_set'].apply('|'.join) # 写入文本文件的两种可选方式 # 方式1:直接用pandas的to_csv,不需要索引和表头的话按如下配置 df1.to_csv('output.txt', sep='\t', index=False, header=False, encoding='utf-8') # 方式2:直接逐行写入拼接后的内容 with open('output.txt', 'w', encoding='utf-8') as f: f.write('\n'.join(df1['test_set'].tolist()))
原有代码失效原因说明
df.replace是对DataFrame中完全匹配的标量值做替换,不会操作列表内部的元素,也不会识别列表转字符串后的括号、逗号字符str.replace是pandas针对字符串类型列的矢量方法,你的列是列表类型,调用后返回全是空值,自然没有替换效果- 即使你先把列表强制转成字符串再替换括号和逗号,也会出现把元素内部的逗号误替换的问题,直接join是最优方案
内容的提问来源于stack exchange,提问作者Tanai Goncalves
相关产品推荐
相关产品推荐

