Как объединить список списков с tsv-файлом в пандах - PullRequest
1 голос
/ 19 сентября 2019

У меня есть список списков, а именно mylist следующим образом.

mylist = [[9, ["nuts", "fruits"]], [12, ["france", "italy", "rome", "paris"]], [18, ["cat", "dog", "parrot", "rabbit", "cow"]], [19, ["ebay", "wish"]]]

У меня также есть файл tsv, а именно myinput следующим образом.

ID Category
12 ["places", "locations"]
19 ["online", "customer"]
18 ["pets"]
9  ["food"]

Я хочуобъедините эти два с ID следующим образом.

my_output = [[9, ["nuts", "fruits"], ["food"]], [12, ["france", "italy", "rome", "paris"], ["places", "locations"]], [18, ["cat", "dog", "parrot", "rabbit", "cow"], ["pets"]], [19, ["ebay", "wish"], ["online", "customer"]]]

Первоначально предполагалось преобразовать файл tsv в список следующим образом и выполнить обычную обработку списка с использованием python.

input_data = pd.read_csv("myinput.tsv", header=0, delimiter="\t", quoting=3 )
my_data = input_data.values.tolist()

Однако мне интересно, можно ли сделать то же самое с помощью панд.

Я с удовольствием предоставлю более подробную информацию, если это необходимо.

Ответы [ 2 ]

2 голосов
/ 19 сентября 2019

Использование map

Пример:

mylist = [[9, ["nuts", "fruits"]], [12, ["france", "italy", "rome", "paris"]], [18, ["cat", "dog", "parrot", "rabbit", "cow"]], [19, ["ebay", "wish"]]]
d = dict(mylist)
df = pd.DataFrame({"ID": [12, 19, 18, 9],
                   "Category": [["places", "locations"], ["online", "customer"], ["pets"], ["food"]]})
df["D"] = df["ID"].map(d) 
print(df)

Выход:

   ID             Category                                D
0  12  [places, locations]     [france, italy, rome, paris]
1  19   [online, customer]                     [ebay, wish]
2  18               [pets]  [cat, dog, parrot, rabbit, cow]
3   9               [food]                   [nuts, fruits]

print(list(zip(df.ID, df.Category, df.D)))

Выход:

[(12, ['places', 'locations'], ['france', 'italy', 'rome', 'paris']), (19, ['online', 'customer'], ['ebay', 'wish']), (18, ['pets'], ['cat', 'dog', 'parrot', 'rabbit', 'cow']), (9, ['food'], ['nuts', 'fruits'])]
1 голос
/ 19 сентября 2019

Мне нравится использовать Pandas.merge(), по моему мнению, гибкий и явный.
Использование вашего столбца целых чисел в качестве индекса необязательно, но я думаю, что здесь есть смысл, поэтому я добавил это.

import pandas as pd

l = [[1, ['first', 'F']], [2, ['second', 'S']], [3, ['third']]]
dfl = pd.DataFrame(l)
dfl.set_index(0, inplace=True)
dfl.columns=['l']

r = [[1, ['first', 'F']], [4, ['fourth', 'F']], [3, ['third']]]
dfr = pd.DataFrame(r)
dfr.set_index(0, inplace=True)
dfr.columns=['r']

dfc = pd.merge(dfl, dfr, left_index=True, right_index=True, how='outer') # change how to meet your needs
print(dfc)

lc = dfc.reset_index().values.tolist()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...