根据DataFrame中不同长度输入的顺序查找唯一字符
Finding unique characters based on order from inputs of different lengths in DataFrame
首先,我在 Whosebug 上查看了 Q1 , Q2, ,但其中 none 与我的问题直接相关。我正在使用数据框,顺序对我来说很重要。
我正在创建一个虚拟数据框以更好地解释我的问题。
data = {'seq': ['YSPNNIQHFHEEHLVHFVLAVLSLTTPPLLCVWNR','TLGTGSFGRVMLVHYAMKILDKVLQIEHTLNEKLVKLMVMEYVPGGEMFYDKPENLLIQVTDFGFAGFDY',
'EKIGEGTYGVVYKVAMKVSLQLIFEFLSMDLKKHKPQNLLILADFL']}
dummy_df = pd.DataFrame(data)
我的目的是按照这个字符串的顺序找到唯一的字符。然后通过创建数据框来保存它们。
我的期望输出:
['Y', 'S', 'P', 'N', 'I', 'Q', 'H', 'F', 'E', 'L', 'V', 'A', 'T', 'C', 'W', 'R']
['T', 'L', 'G', 'S', 'F', 'R', 'V', 'M', 'H', 'Y', 'A', 'K', 'I', 'D', 'Q', 'E', 'N', 'P']
['E', 'K', 'I', 'G', 'T', 'Y', 'V', 'A', 'M', 'S', 'L', 'Q', 'F', 'D', 'H', 'P', 'N']
其实我有两个解决办法:
1)
unique_char = []
for c in dummy_df ['seq'][0]:
if not c in unique_char:
unique_char.append(c)
print(unique_char)
它工作正常,但通常我的行数超过 1000。当我设置 for 循环结构时出现错误,每个循环结构将 运行 分开。然后我需要将此解决方案转换为数据框。
2
from collections import defaultdict
dictionary = defaultdict(set)
for i in range(len(dummy_df['seq']):
for c in dummy_df ['seq'][i]:
if not c in dictionary[i]:
dictionary[i].add(c)
它适用于所有行,但结果不按顺序。
例如,解决方案 2 的输出
为了
词典[0](第一行)
{'A',
'C',
'E',
'F',
'H',
'I',
'L',
'N',
'P',
'Q',
'R',
'S',
'T',
'V',
'W',
'Y'}
应该是
['Y', 'S', 'P', 'N', 'I', 'Q', 'H', 'F', 'E', 'L', 'V', 'A', 'T', 'C', 'W', 'R']
其实你可以通过字典按顺序找到唯一的条目。
for i in data['seq']:
print(list(dict.fromkeys(i)))
['Y', 'S', 'P', 'N', 'I', 'Q', 'H', 'F', 'E', 'L', 'V', 'A', 'T', 'C', 'W', 'R']
['T', 'L', 'G', 'S', 'F', 'R', 'V', 'M', 'H', 'Y', 'A', 'K', 'I', 'D', 'Q', 'E', 'N', 'P']
['E', 'K', 'I', 'G', 'T', 'Y', 'V', 'A', 'M', 'S', 'L', 'Q', 'F', 'D', 'H', 'P', 'N']
你可以做一个列表理解来添加到数据框中。
new_data = [list(dict.fromkeys(i)) for i in data['seq']]
首先,我在 Whosebug 上查看了 Q1 , Q2,
我正在创建一个虚拟数据框以更好地解释我的问题。
data = {'seq': ['YSPNNIQHFHEEHLVHFVLAVLSLTTPPLLCVWNR','TLGTGSFGRVMLVHYAMKILDKVLQIEHTLNEKLVKLMVMEYVPGGEMFYDKPENLLIQVTDFGFAGFDY',
'EKIGEGTYGVVYKVAMKVSLQLIFEFLSMDLKKHKPQNLLILADFL']}
dummy_df = pd.DataFrame(data)
我的目的是按照这个字符串的顺序找到唯一的字符。然后通过创建数据框来保存它们。
我的期望输出:
['Y', 'S', 'P', 'N', 'I', 'Q', 'H', 'F', 'E', 'L', 'V', 'A', 'T', 'C', 'W', 'R']
['T', 'L', 'G', 'S', 'F', 'R', 'V', 'M', 'H', 'Y', 'A', 'K', 'I', 'D', 'Q', 'E', 'N', 'P']
['E', 'K', 'I', 'G', 'T', 'Y', 'V', 'A', 'M', 'S', 'L', 'Q', 'F', 'D', 'H', 'P', 'N']
其实我有两个解决办法:
1)
unique_char = []
for c in dummy_df ['seq'][0]:
if not c in unique_char:
unique_char.append(c)
print(unique_char)
它工作正常,但通常我的行数超过 1000。当我设置 for 循环结构时出现错误,每个循环结构将 运行 分开。然后我需要将此解决方案转换为数据框。
2
from collections import defaultdict
dictionary = defaultdict(set)
for i in range(len(dummy_df['seq']):
for c in dummy_df ['seq'][i]:
if not c in dictionary[i]:
dictionary[i].add(c)
它适用于所有行,但结果不按顺序。
例如,解决方案 2 的输出 为了 词典[0](第一行)
{'A',
'C',
'E',
'F',
'H',
'I',
'L',
'N',
'P',
'Q',
'R',
'S',
'T',
'V',
'W',
'Y'}
应该是
['Y', 'S', 'P', 'N', 'I', 'Q', 'H', 'F', 'E', 'L', 'V', 'A', 'T', 'C', 'W', 'R']
其实你可以通过字典按顺序找到唯一的条目。
for i in data['seq']:
print(list(dict.fromkeys(i)))
['Y', 'S', 'P', 'N', 'I', 'Q', 'H', 'F', 'E', 'L', 'V', 'A', 'T', 'C', 'W', 'R']
['T', 'L', 'G', 'S', 'F', 'R', 'V', 'M', 'H', 'Y', 'A', 'K', 'I', 'D', 'Q', 'E', 'N', 'P']
['E', 'K', 'I', 'G', 'T', 'Y', 'V', 'A', 'M', 'S', 'L', 'Q', 'F', 'D', 'H', 'P', 'N']
你可以做一个列表理解来添加到数据框中。
new_data = [list(dict.fromkeys(i)) for i in data['seq']]