如何更改字符串列表的仅部分(切片)的值

Posted

技术标签:

【中文标题】如何更改字符串列表的仅部分(切片)的值【英文标题】:How to change the values of only part (slice) of a list of strings 【发布时间】:2018-12-31 10:19:21 【问题描述】:

有人知道如何使用 for 循环连接字符串列表吗?

这是有效的,没有循环:

提取列名

column_names = file.columns.tolist()
column_names[1]= column_names[1] + '_Vol_Adj'
column_names[1]

但不能作为以下循环的一部分:

for i in column_names[1:-2]:
    column_names[i]= column_names[i] + '_Vol_Adj'
    i = i+1
TypeError                                 Traceback (most recent call last)
<ipython-input-242-5509cede9f32> in <module>()
      2 
      3 for i in column_names[1:-2]:
----> 4     column_names[i]= column_names[i] + '_Vol_Adj'
      5     i = i+1

TypeError: list indices must be integers or slices, not str

【问题讨论】:

for i in column_names[1:-2] 不会遍历列表中的索引。在你的循环中尝试print(i),你会看到问题。相关:Accessing the index in 'for' loops? 【参考方案1】:

您的问题是,当您使用for i in column_names[1:-2] 遍历列表column_names 时,i 的值将是列表中的元素(而不是相应的索引)。

在您的情况下,一件简单的事情是使用enumerate,如下例所示:

column_names = ["a", "b", "c", "d", "e"]
for i, val in enumerate(column_names[1:-2]):
    column_names[i+1] += '_Vol_Adj'
print(column_names)
#['a', 'b_Vol_Adj', 'c_Vol_Adj', 'd', 'e']

我正在循环内更新索引 i+1 处的值,因为我们从索引 1 开始迭代。

或者你可以使用range(1, len(column_names)-2) 作为@Barmar suggested:

for i in range(1, len(column_names)-2):
    column_names[i+1] += '_Vol_Adj'

【讨论】:

另一个选项是range(1, len(column_names)-2),那么你不需要使用i+1【参考方案2】:

也可以使用add_suffixdf.rename

cols=['b', 'c']
ncols = df[cols].add_suffix('_suffix').columns

df.rename(columns=old:new for old,new in zip(cols,ncols))

【讨论】:

【参考方案3】:

请参阅@pault's solution,了解如何使用enumeraterange 调整for 循环。

鉴于您使用的是 Pandas,您可能对基于 NumPy 的解决方案感兴趣:

import pandas as pd, numpy as np

df = pd.DataFrame(columns=list('ABCDE'))

arr = df.columns.values
arr[1:-1] += '_Vol_Adj'
df.columns = arr

print(df.columns)

Index(['A', 'B_Vol_Adj', 'C_Vol_Adj', 'D_Vol_Adj', 'E'], dtype='object')

不要直接修改df.columns.values,这一点很重要,因为这会产生副作用。在这里,我们修改了底层 NumPy 数组的副本,然后分配回数据帧。

【讨论】:

以上是关于如何更改字符串列表的仅部分(切片)的值的主要内容,如果未能解决你的问题,请参考以下文章

Python根据列表中的条件更改字符串的一部分

python-列表,元组

字符串处理之下标和切片

python字符串

python字符串

下标与切片