在没有上下文信息的情况下从元组访问对象的值
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]
我有一个 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]