在没有上下文信息的情况下从元组访问对象的值

Accessing the value of an object from a tuple without context information

我有一个 ID 列表 (IDList),它是元组列表的一个子集,包含这些 ID 和字符串格式的相关 ID。可以有具有一个相关 ID 的元组,例如(1694, '1743'), 两个相关 ID 以逗号分隔,例如(3252, '3253,3254') 或无相关 ID ('none')。

我想将元组中与 IDList 中的 ID 相关的所有 ID 写入一个公共列表 (final_list)。因此,包含两个 ID 的元素应该用逗号分隔,包含 "none" 的元素应该被删除。

这是我的代码现在的样子:

IDList = [1694, 3252, 2779]
related = [(1694, '1743'), (3252, '3253,3254'), (3253, '3252,3254'), (3254, '3252,3253'), (1743, '1694'), (2779, 'none'), (3251, 'none'), (1677, 'none'), (1676, 'none'), (1678, '1679'), (1679, '1678')]
final_list = []
related_frame = pd.DataFrame(related)
print(related_frame)
for n in l:
    dset = related_frame.loc[related_frame[0] == n]
    print (dset)
    rel_set = dset[1]
    rel_set = str(rel_set)

    if "," in rel_set:
        rel_set = rel_set.split(',')

        print(rel_set)
    if "none" in rel_set:
        rel_set = []
    final_list.append(rel_set)

print(final_list)

在数据帧格式中,它看起来仍然符合预期:

print(related_frame)

输出:

       0          1
0   1694       1743
1   3252  3253,3254
2   3253  3252,3254
3   3254  3252,3253
4   1743       1694
5   2779       none
6   3251       none
7   1677       none
8   1676       none
9   1678       1679
10  1679       1678

但是,一旦我开始只使用相关值,Python 出于某种原因将有关类型的信息添加到值中。

所以 final_list 看起来像这样:

print(final_list)

[['0    1743\nName: 1', ' dtype: object'], ['1    3253', '3254\nName: 1', ' dtype: object']]

我想这样:

print(final_list)

[1743, 3253, 3254]

有谁知道如何在没有 \nName 和 dtype 信息等的情况下访问元组中对象的值?所以我只想阅读普通值。相关列表中的数据是从 SAP HANA 数据库中的 varchar 列获得的,因此无论如何这些都不是非常特殊的对象。

我知道我可以使用

删除它们
str.replace("\nName: 1', ' dtype: object", "")

但是有没有更方便的方法呢?在那种情况下,final_list 也会像这样(我更喜欢如上所述):

[['0    1743'], ['1    3253', '3254']]

您可以结合使用正则表达式和列表理解。

import re
final_list = [['0    1743\nName: 1', ' dtype: object'], ['1    3253', '3254\nName: 1', ' dtype: object']]
print([int(i) for sublist in [re.findall(r'(?<!Name: )(\d+)(?=$|\n)', i) for sublist in final_list for i in sublist] for i in sublist])

这输出:

[1743, 3253, 3254]