有人知道如何使用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
答案 0 :(得分:2)
您的问题是,当您使用column_names
遍历列表for i in column_names[1:-2]
时,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'
答案 1 :(得分:2)
也可以使用add_suffix
和df.rename
cols=['b', 'c']
ncols = df[cols].add_suffix('_suffix').columns
df.rename(columns={old:new for old,new in zip(cols,ncols)})
答案 2 :(得分:1)
有关如何使用for
或enumerate
来调整range
循环的信息,请参见@pault's solution。
鉴于您正在使用熊猫,您可能对基于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数组的副本,然后将其分配回数据框。