Как превратить вложенный список с несколькими значениями разной длины в кадр данных pandas в python? - PullRequest
1 голос
/ 08 июля 2019

Я собираю идентификаторы подписчиков (от 1000 до 25000 на учетную запись) с 50 учетных записей Twitter и смог сохранить эти идентификаторы подписчиков в формате json в формате, подобном следующему:


[
    36146779,
    [
        170742628,
        3597763396,
        13453212,
        24763726,
        19087188,
        19605181,
        37374972
    ],
    22971125,
    [
        1114702974,
        1145981566365130758,
        1118409958561685504,
        822439041312423941,
        1110524937788424197,
        807718095460581376,
        24763726,
        3181477874,
        1076870147980300288,
        307465302,
    ],
     24763726,
    [........

Что яПопытка сделать это, чтобы найти все идентификаторы подписчиков, которые являются одинаковыми, скажем, человек 24763726 оба следует учетные записи 36146779 и 22971125. Любые рекомендации о том, как решить эту проблему?Я довольно новичок в Python и программировании в целом и был бы очень благодарен за любую помощь или совет!

До сих пор мне удавалось превратить сохраненные данные (в формате json) в фрейм данных pandas, но это не та форма, в которой я хотел бы их получить.

import json
import pandas as pd

# Import the data
with open("2019_07_02_eco copy.json", "r", encoding="utf-8") as f:
    data_list = json.load(f)

# Create a pandas DataFrame with the follower ids 
df = pd.DataFrame(data_list)

print(df.head)

То, что я ожидал, было кадром данных pd с идентификаторами учетных записей (из 50 учетных записей) в качестве заголовков столбцов и идентификаторов подписчиков в строках ниже этого.

Что я получил, это было:

[194 rows x 1 columns] 

<bound method NDFrame.head of                                                      0
0                                             36146779
1    [170742628, 3597763396, 247113642, 11306966070...
2                                             22971125
3    [1114702974, 1145981566365130758, 111840995856...
4    [295929695, 1024767030065606657, 1007033735013...
5    [984651561518252032, 982678444088541184, 98696...
6    [227843834, 23838268, 43140516, 2790255573, 33...
7                                            111125168
8    [1144607601914720258, 70032358, 18055487, 1127...
9    [947686805809266688, 9701692, 1096088766, 3337...
10   [2967527466, 2269464956, 249752699, 7556396244...
11   [321553655, 3546285436, 126038375, 71595951158...
12                                            71280747
13   [2955657113, 192354019, 1641657258, 375061682,...
14   [900344203955367937, 221726613, 1358476824, 14...
15   [2304150619, 14436400, 4833507964, 4883671481,...
16   [274049948, 2796219727, 185657334, 993542912, ...
17                                            72665016
18   [4892138044, 19982260, 3150202778, 73071487944...
19   [20389458, 386293346, 590031373, 576342755, 52...
20                                          1289611591
21   [3252647829, 16817453, 56003694, 1039493295318...
22                                            25088527
23   [436396700, 993251142263099392, 11435552424428...
24   [329428581, 20537025, 1724220128, 1682340361, ...
25   [15005765, 15678953, 54576200, 7521632, 121736...
26                                            19954039
27   [1033101308935462912, 1145323862969790464, 866...

Ответы [ 2 ]

1 голос
/ 08 июля 2019

попробуйте это:

data = [
    36146779,
    [
        170742628,
        3597763396,
        13453212,
        24763726,
        19087188,
        19605181,
        37374972
    ],
    22971125,
    [
        1114702974,
        1145981566365130758,
        1118409958561685504,
        822439041312423941,
        1110524937788424197,
        807718095460581376,
        24763726,
        3181477874,
        1076870147980300288,
        307465302,
    ],
    24763726,
    [
        1145981566365130758,
        1118409958561685504,
        822439041312423941,
        1110524937788424197,
        22971125
    ]
    ]

d = {}
for i in range(0,len(data)-1,2): # convert to dictionary
    d[str(data[i])] = data[i+1]

def getKeys(dictOfElements, valueToFind):
    listOfKeys = list()
    listOfItems = dictOfElements.items()
    for item  in listOfItems:
        if valueToFind in item[1]:
            listOfKeys.append(item[0])
    return  listOfKeys


for key in d.keys():
    keys = ",".join(getKeys(d, int(key)))
    print ("person: {}, follows accounts: {}".format(key, keys))

выход:

person: 36146779, follows accounts: 
person: 22971125, follows accounts: 24763726
person: 24763726, follows accounts: 36146779,22971125
0 голосов
/ 08 июля 2019

Ваши данные - это один столбец, который содержит идентификатор пользователя, а затем список подключенных идентификаторов и т. Д.Он переводится в DataFrame с одним столбцом, содержащим целое число или список целых чисел.

Попробуйте сгруппировать элементы по два, а затем превратить этот список из двух элементов в словарь, прежде чем преобразовать его вDataFrame.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...