Создание кадра данных из значений, извлеченных из столбца json в Pandas - PullRequest
0 голосов
/ 06 июня 2018

Я загрузил файл .csv в df, и одна из строк столбца содержит список словарей, как показано ниже.

data = [{"character": "Jake Sully", "gender": 2,}, {"character": "Neytiri", "gender": 1},                                                         
        {"character": "Dr. Grace Augustine","gender": 1},         
        {"character": "Col. Quaritch", "gender": 2]

Но, конечно, после загрузки он читается как строка.Итак, я преобразовал каждую строку в столбце в json, что облегчает извлечение значений на основе имени ключа.Затем мне нужно создать отдельный df следующим образом.

df = {'character': ['Jake Sully','Neytiri', 'Dr. Grace Augustine', 'Col.Quaritch'], 
    'gender': [2, 1, 1, 2]} 

Это мой код, но я не могу точно получить нужный вывод df.

df = pd.DataFrame() #create new df
keys = ['character','gender'] #keys to extract values from json
lst=[]
for val in data: #to iterate over data series
    for object in json.loads(val):
        for key in keys:
            lst.append(object[key])
    df = pd.concat([df,pd.DataFrame(lst,columns=[key])], axis=1)

Может кто-нибудь сказать мнечто я делаю не так?

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

Может быть, я не совсем понимаю ваш вопрос, но я могу получить df просто отлично.

data = [{"character": "Jake Sully", "gender": 2,}, 
         {"character": "Neytiri", "gender": 1},
         {"character": "Dr. Grace Augustine","gender": 1},
         {"character": "Col. Quaritch", "gender": 2}]

pd.DataFrame(data)

Out:

             character       gender
0           Jake Sully       2
1              Neytiri       1
2  Dr. Grace Augustine       1`
0 голосов
/ 06 июня 2018

разобрался.

df = pd.DataFrame() #create new df
keys = ['character','gender'] #keys to extract values from json
for i,key in enumerate(keys):
     lst_i = []
     for row in data: #iterating over the rows in the cols of interest 
          for object in json.loads(row):
              lst_i.append(object[key])
     df = pd.concat([df,pd.DataFrame(lst_i,columns=[key])], axis=1)
0 голосов
/ 06 июня 2018

pd.DataFrame принимает список словарей напрямую:

data = [{"character": "Jake Sully", "gender": 2,},
        {"character": "Neytiri", "gender": 1},
        {"character": "Dr. Grace Augustine","gender": 1},
        {"character": "Col. Quaritch", "gender": 2}]

df = pd.DataFrame(data)  # or pd.DataFrame.from_dict(data)

print(df)

             character  gender
0           Jake Sully       2
1              Neytiri       1
2  Dr. Grace Augustine       1
3        Col. Quaritch       2

Следовательно, вам нужно только извлечь список словарей из файла json.Один из способов сделать это - через json.loads.

. Лучшей идеей является считывание данных непосредственно в кадр данных через pd.read_json.

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