我有一个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-information等信息的情况下从tupel中的对象访问值吗?因此,我只想阅读原始值。相关列表中的数据是从SAP HANA数据库中的varchar列获取的,因此无论如何它们都不是非常特殊的对象。
我知道我可以使用
删除它们print(final_list)
[1743, 3253, 3254]
但是没有更方便的方法吗?在这种情况下,final_list也将像这样(并且我更喜欢如上所述):
str.replace("\nName: 1', ' dtype: object", "")
答案 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]