Доступ к значению объекта из кортежа без контекстной информации - PullRequest
0 голосов
/ 03 июля 2018

У меня есть список идентификаторов (IDList), которые являются подмножеством списка наборов, содержащих эти идентификаторы и связанные идентификаторы в String-Format. Могут быть наборы с одним идентификатором, например, (1694, 1743), два родственных Идентификаторы разделяются запятой, например (3252, «3253,3254») или без идентификатора («нет»).

Я хотел бы записать все идентификаторы из наборов, которые связаны с идентификаторами в IDList, в один общий список (final_list). Поэтому элементы, содержащие два идентификатора, должны быть разделены запятой, а элементы, содержащие «нет», должны быть удалены.

Вот так выглядит мой код прямо сейчас:

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)

В формате dataframe он все еще выглядит как ожидалось:

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 и т. Д.? Так что я просто хотел бы прочитать простое значение. Данные в связанном списке получены из столбца varchar в базе данных SAP HANA, поэтому они не являются какими-либо исключительными объектами.

Я знаю, что могу удалить их, используя

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

Но нет ли более удобного способа? В этом случае final_list также будет выглядеть так (и я бы предпочел иметь его, как указано выше):

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

1 Ответ

0 голосов
/ 03 июля 2018

Вы можете использовать комбинацию регулярного выражения и понимания списка.

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]
...