在 'for' 函数中枚举
Enumerate in 'for' function
我想在每个 .tsv
文件中添加一个名为 X
的列。我希望此列具有 folder_names
列表中相应索引的值(每个 .tsv 文件的 folder_names
的一个值)。但是 enumerate
函数在 for loop
的每次迭代中重复自身,所以列 'X' 总是得到 names
的最后一个值而不是相应的值。
我得到了这两个列表:
all_files_tsv = [tsv_file_1, tsv_file_2.... tsv_file_n]
folder_names = [folder_name_1, folder_name_2.... folder_name_n]
所需的输出如下:
tsv_file_1
:
Column1
Column2
X
1
A
folder_name_1
2
B
folder_name_1
3
C
folder_name_1
tsv_file_2
:
Column1
Column2
X
1
---
folder_name_2
2
---
folder_name_2
3
---
folder_name_2
这是我现在拥有的代码:
for file_ in all_files_tsv:
df = pd.read_csv(file_,sep = '\t', header=0)
for index, names in enumerate(folder_names):
df['X'] = names
知道如何解决这个问题吗?
您不需要 enumerate()
。您可以使用 zip()
并行迭代 all_files_tsv
和 folder_names
以获取相应的元素。
for file, name in zip(all_files_tsv, folder_names):
df = pd.read_csv(file, sep='\t', header=0)
df['X'] = name
df.to_csv(file, sep='\t', header=0)
嵌套循环用于两个列表之间的叉积,zip()
用于配对对应的元素。
我想在每个 .tsv
文件中添加一个名为 X
的列。我希望此列具有 folder_names
列表中相应索引的值(每个 .tsv 文件的 folder_names
的一个值)。但是 enumerate
函数在 for loop
的每次迭代中重复自身,所以列 'X' 总是得到 names
的最后一个值而不是相应的值。
我得到了这两个列表:
all_files_tsv = [tsv_file_1, tsv_file_2.... tsv_file_n]
folder_names = [folder_name_1, folder_name_2.... folder_name_n]
所需的输出如下:
tsv_file_1
:
Column1 | Column2 | X |
---|---|---|
1 | A | folder_name_1 |
2 | B | folder_name_1 |
3 | C | folder_name_1 |
tsv_file_2
:
Column1 | Column2 | X |
---|---|---|
1 | --- | folder_name_2 |
2 | --- | folder_name_2 |
3 | --- | folder_name_2 |
这是我现在拥有的代码:
for file_ in all_files_tsv:
df = pd.read_csv(file_,sep = '\t', header=0)
for index, names in enumerate(folder_names):
df['X'] = names
知道如何解决这个问题吗?
您不需要 enumerate()
。您可以使用 zip()
并行迭代 all_files_tsv
和 folder_names
以获取相应的元素。
for file, name in zip(all_files_tsv, folder_names):
df = pd.read_csv(file, sep='\t', header=0)
df['X'] = name
df.to_csv(file, sep='\t', header=0)
嵌套循环用于两个列表之间的叉积,zip()
用于配对对应的元素。