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

时间:2018-07-03 00:25:47

标签: python types type-conversion tostring hana

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

我想将与IDList中的ID相关的Tupel的所有ID写入一个公用列表(final_list)。因此,应将包含两个ID的元素用逗号分隔,将包含“无”的元素删除。

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

FOO

在数据框格式中,它仍然看起来像预期的那样:

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)

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

所以final_list看起来像这样:

       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

我想这样:

print(final_list)

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

有人知道如何在没有\ nName和dtype-in​​formation等信息的情况下从tupel中的对象访问值吗?因此,我只想阅读原始值。相关列表中的数据是从SAP HANA数据库中的varchar列获取的,因此无论如何它们都不是非常特殊的对象。

我知道我可以使用

删除它们
print(final_list)

[1743, 3253, 3254]

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

str.replace("\nName: 1', ' dtype: object", "")

1 个答案:

答案 0 :(得分:1)

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

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]