如何让DataFrame中不等长字符串匹配长度?以value2适配value3为例
解决方案:按对应列元素数量截断DataFrame字符串列
需求说明
将DataFrame中value2列的字符串按逗号分割后,截断多余元素,使其元素数量与对应行value3列分割后的元素数量一致,再重新拼接为字符串。
原始数据
| type | value1 | value2 | value3 |
|---|---|---|---|
| Inner | 0.52,0.11,0.08 | 1.3,1.9,2.8,1.08 | 56.9,60.1,1.0 |
| Outer | 0.12,3.09,5.91,0.01 | 0.1,0.35,1.93,9.31,7.19,3.29 | 93.53,0.87,0.65,0.98 |
| Median | 0.10 | 8.10,9.56 | 3.10 |
实现代码
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ 'type': ['Inner', 'Outer', 'Median'], 'value1': ['0.52,0.11,0.08', '0.12,3.09,5.91,0.01', '0.10'], 'value2': ['1.3,1.9,2.8,1.08', '0.1,0.35,1.93,9.31,7.19,3.29', '8.10,9.56'], 'value3': ['56.9,60.1,1.0', '93.53,0.87,0.65,0.98', '3.10'] }) # 逐行处理:截断value2至与value3相同的元素数量 df['value2'] = df.apply( lambda row: ','.join(row['value2'].split(',')[:len(row['value3'].split(','))]), axis=1 ) # 查看处理后的结果 print(df)
处理后结果
| type | value1 | value2 | value3 |
|---|---|---|---|
| Inner | 0.52,0.11,0.08 | 1.3,1.9,2.8 | 56.9,60.1,1.0 |
| Outer | 0.12,3.09,5.91,0.01 | 0.1,0.35,1.93,9.31 | 93.53,0.87,0.65,0.98 |
| Median | 0.10 | 8.10 | 3.10 |
代码说明
- 分割字符串:使用
split(',')将value2和value3的字符串按逗号拆分为元素列表; - 获取截断长度:通过
len()得到value3分割后的元素数量,作为value2的截断长度; - 截断并拼接:取
value2分割后列表的前n个元素,再用','.join()重新拼接为字符串; - 逐行应用:利用
apply(..., axis=1)实现对DataFrame每行的处理。
内容的提问来源于stack exchange,提问作者user20751152
相关产品推荐
相关产品推荐

