<p>由于我不清楚请求的df结构,您可以在下面找到2个选项</p>
<p><em>选项1正在从文件名和频道列表创建一行<br/>
选项2从文件名创建一行,每个通道都是通道集</em></p>
<p><strong>更新</strong><br/>
选项3(自OP添加请求输出的描述后创建)</p>
<pre><code>import pandas as pd
data = ['preprocessed\\AB_30624_badchannels.set', {'E88', 'E91', 'E248', 'E139', 'E245', 'E216', 'E111'}, 'preprocessed\\ACM_98630_badchannels.set', {'E88', 'E186', 'E91', 'E139', 'E102', 'E216', 'E111', 'E238'}, 'preprocessed\\AL_96705_badchannels.set', {'E88', 'E37', 'E91', 'E73', 'E232', 'E256', 'E139', 'E235', 'E216', 'E46'}, 'preprocessed\\AP_43781_badchannels.set', {'E25', 'E164', 'E253', 'E104', 'E230', 'E237', 'E18', 'E198', 'E120', 'E10', 'E233', 'E46', 'E54', 'E82', 'E31'}]
# option 1
entries = []
file = None
channels = None
for x in data:
if isinstance(x,str):
file = x.split('\\')[-1][:-4]
else:
channels = list(x)
if file and channels:
entries= {'file': file,'channels': channels}
file = None
channels = None
df = pd.DataFrame(entries)
print(df.to_string())
# option 2
entries = []
file = None
channels = None
for x in data:
if isinstance(x,str):
file = x.split('\\')[-1][:-4]
else:
channels = x
for c in channels:
entries.append({'file':file, 'channel':c})
file = None
channels = None
df = pd.DataFrame(entries)
print(df.to_string())
# option 3
import pandas as pd
entries = dict()
data = ['preprocessed\\AB_30624_badchannels.set',
{'E88', 'E91', 'E248', 'E139', 'E245', 'E216', 'E111'},
'preprocessed\\ACM_98630_badchannels.set',
{'E88', 'E186', 'E91', 'E139', 'E102', 'E216', 'E111', 'E238'},
'preprocessed\\AL_96705_badchannels.set',
{'E88', 'E37', 'E91'}]
_max = 0
for x in range(0,len(data),2):
key = '_'.join(data[x].split('\\')[1].split('_')[:2])
entries[key] = list(data[x+1])
_max = len(entries[key]) if len(entries[key]) > _max else _max
for k,v in entries.items():
v.extend(['NA'] * (_max - len(v)))
df = pd.DataFrame(entries)
print(df)
</code></pre>
<p>产出(1)</p>
<pre><code> file channels
0 AP_43781_badchannels E46
1 AP_43781_badchannels E233
2 AP_43781_badchannels E237
3 AP_43781_badchannels E18
4 AP_43781_badchannels E164
5 AP_43781_badchannels E104
6 AP_43781_badchannels E82
7 AP_43781_badchannels E253
8 AP_43781_badchannels E120
9 AP_43781_badchannels E10
10 AP_43781_badchannels E54
11 AP_43781_badchannels E198
12 AP_43781_badchannels E25
13 AP_43781_badchannels E31
14 AP_43781_badchannels E230
</code></pre>
<p>产出(2)</p>
<pre><code> channel file
0 E88 AB_30624_badchannels
1 E216 AB_30624_badchannels
2 E248 AB_30624_badchannels
3 E111 AB_30624_badchannels
4 E139 AB_30624_badchannels
5 E245 AB_30624_badchannels
6 E91 AB_30624_badchannels
7 E88 ACM_98630_badchannels
8 E216 ACM_98630_badchannels
9 E111 ACM_98630_badchannels
10 E186 ACM_98630_badchannels
11 E139 ACM_98630_badchannels
12 E238 ACM_98630_badchannels
13 E102 ACM_98630_badchannels
14 E91 ACM_98630_badchannels
15 E88 AL_96705_badchannels
16 E216 AL_96705_badchannels
17 E232 AL_96705_badchannels
18 E235 AL_96705_badchannels
19 E46 AL_96705_badchannels
20 E73 AL_96705_badchannels
21 E139 AL_96705_badchannels
22 E256 AL_96705_badchannels
23 E37 AL_96705_badchannels
24 E91 AL_96705_badchannels
25 E46 AP_43781_badchannels
26 E233 AP_43781_badchannels
27 E237 AP_43781_badchannels
28 E18 AP_43781_badchannels
29 E164 AP_43781_badchannels
30 E104 AP_43781_badchannels
31 E82 AP_43781_badchannels
32 E253 AP_43781_badchannels
33 E120 AP_43781_badchannels
34 E10 AP_43781_badchannels
35 E54 AP_43781_badchannels
36 E198 AP_43781_badchannels
37 E25 AP_43781_badchannels
38 E31 AP_43781_badchannels
39 E230 AP_43781_badchannels
</code></pre>
<p>产出(3)</p>
<pre><code> AB_30624 ACM_98630 AL_96705
0 E91 E111 E37
1 E245 E216 E91
2 E111 E91 E88
3 E248 E238 NA
4 E88 E186 NA
5 E216 E88 NA
6 E139 E139 NA
7 NA E102 NA
</code></pre>