首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列表/数据帧的特定行中的索引处的字符串替换为同一索引处的行中的字符串

将列表/数据帧的特定行中的索引处的字符串替换为同一索引处的行中的字符串
EN

Stack Overflow用户
提问于 2017-08-31 00:13:16
回答 2查看 120关注 0票数 1

我有一个像这样的二维数组:

代码语言:javascript
复制
list_of_data = 
    [['Joe', 4, 'MSP', 4, 5, 'cabbage', None], 
    ['Joe', 43, '2TM', 41, 53, 'cabbage', None],
    ['Joe', 24, 'MSP', 44, 55, 'cabbage', None],
    ['Joe', 54, 'MIA', 42, 85, 'cabbage', None],

    ['Tom', 7, '2TM', 4, 52, 'cabbage', None],
    ['Tom', 4, 'LAX', 43, 52, 'cabbage', None],
    ['Tom', 4, 'MCO', 4, 5, 'cabbage', None],

    ['Fred', 4, '2TM', 4, 5, 6, 'cabbage'],
    ['Fred', 4, 'LAG', 4, 5, 6, 'cabbage'],
    ['Fred', 4, 'ITH', 4, 5, 6, 'cabbage']]

这个问题是关于在第二个索引处包含值'2TM‘的行/索引。例如:

在他的数据的第二次出现中,Joe在索引2处具有值'2TM‘。在他的数据第一次出现时,Tom在索引2处的值为'2TM‘。在他的数据第一次出现时,Fred在索引2处的值为'2TM‘。

每次值'2TM‘出现在数据中时,我想用下两行中相同索引处的值替换'2TM’,用连字符分隔。上面的示例如下所示:

代码语言:javascript
复制
list_of_data = 
    [['Joe', 4, 'MSP', 4, 5, 'cabbage', None], 
    ['Joe', 43, 'MSP-MIA', 41, 53, 'cabbage', None],
    ['Joe', 24, 'MSP', 44, 55, 'cabbage', None],
    ['Joe', 54, 'MIA', 42, 85, 'cabbage', None],

    ['Tom', 7, 'LAX-MCO', 4, 52, 'cabbage', None],
    ['Tom', 4, 'LAX', 43, 52, 'cabbage', None],
    ['Tom', 4, 'MCO', 4, 5, 'cabbage', None],

    ['Fred', 4, 'LAG-ITH', 4, 5, 6, 'cabbage'],
    ['Fred', 4, 'LAG', 4, 5, 6, 'cabbage'],
    ['Fred', 4, 'ITH', 4, 5, 6, 'cabbage']]

我已经试过用替换了。方法来获取可能接近正确代码的内容:

代码语言:javascript
复制
x=0
for row in list_of_data:
    if '2TM' in row:
        list_of_data.replace(list_of_data[2], list_of_data[x+1 + x+2])
    x+=1

这将产生错误消息:

代码语言:javascript
复制
AttributeError: 'list' object has no attribute 'replace'
EN

回答 2

Stack Overflow用户

发布于 2017-08-31 00:21:21

我想这样就行了:

代码语言:javascript
复制
list_of_data = [['Joe', 4, 'MSP', 4, 5, 'cabbage', None],
                ['Joe', 43, '2TM', 41, 53, 'cabbage', None],
                ['Joe', 24, 'MSP', 44, 55, 'cabbage', None],
                ['Joe', 54, 'MIA', 42, 85, 'cabbage', None],

                ['Tom', 7, '2TM', 4, 52, 'cabbage', None],
                ['Tom', 4, 'LAX', 43, 52, 'cabbage', None],
                ['Tom', 4, 'MCO', 4, 5, 'cabbage', None],

                ['Fred', 4, '2TM', 4, 5, 6, 'cabbage'],
                ['Fred', 4, 'LAG', 4, 5, 6, 'cabbage'],
                ['Fred', 4, 'ITH', 4, 5, 6, 'cabbage']]

for i in range(len(list_of_data)):
    if list_of_data[i][2] == '2TM':
        list_of_data[i][2] = list_of_data[i+1][2] + '-' + list_of_data[i+2][2]

print(list_of_data)

输出:

代码语言:javascript
复制
[['Joe', 4, 'MSP', 4, 5, 'cabbage', None], ['Joe', 43, 'MSP-MIA', 41, 53, 'cabbage', None], ['Joe', 24, 'MSP', 44, 55, 'cabbage', None], ['Joe', 54, 'MIA', 42, 85, 'cabbage', None], ['Tom', 7, 'LAX-MCO', 4, 52, 'cabbage', None], ['Tom', 4, 'LAX', 43, 52, 'cabbage', None], ['Tom', 4, 'MCO', 4, 5, 'cabbage', None], ['Fred', 4, 'LAG-ITH', 4, 5, 6, 'cabbage'], ['Fred', 4, 'LAG', 4, 5, 6, 'cabbage'], ['Fred', 4, 'ITH', 4, 5, 6, 'cabbage']]
票数 1
EN

Stack Overflow用户

发布于 2017-08-31 00:33:03

列表没有替换功能。

试试这个:

代码语言:javascript
复制
for row in list_of_data:
  if '2tm' in row:
    id = list_of_data.index('2tm')
    next_i = id + 1;
    next_again = id + 2;
    list_of_data[id] = list_of_data[next_i] + '-' + list_of_data[next_again]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45965231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档