Преобразование столбца строк JSON в столбцы данных - PullRequest
0 голосов
/ 02 июня 2018

У меня большой фрейм данных, около 30000 строк и один столбец, содержащий строку json.Каждая строка json содержит несколько переменных и ее значение. Я хочу разбить эту строку json на столбцы данных

две строки выглядят как

0 {"a":"1","b":"2","c":"3"}
1 {"a" ;"4","b":"5","c":"6"}

Я хочу преобразовать это в фрейм данныхкак

a   b   c
1   2   3
4   5   6

Пожалуйста, помогите

Ответы [ 3 ]

0 голосов
/ 02 июня 2018
with open(json_file) as f:
    df = pd.DataFrame(json.loads(line) for line in f)
0 голосов
/ 02 июня 2018

Кажется, что у ваших значений столбца есть дополнительное число перед фактической строкой json.Так что вы можете сначала удалить это (перейдите к Method , если это не так)

Один из способов сделать это - применить функцию к столбцу

# constructing the df
df = pd.DataFrame([['0 {"a":"1","b":"2","c":"3"}'],['1 {"a" :"4","b":"5","c":"6"}']], columns=['json'])

# print(df)
                         json
# 0  0 {"a":"1","b":"2","c":"3"}
# 1  1 {"a" :"4","b":"5","c":"6"}

# function to remove the number
import re

def split_num(val):
    p = re.compile("({.*)")
    return p.search(val).group(1)

# applying the function
df['json'] = df['json'].map(lambda x: split_num(x))
print(df)

#                          json
# 0   {"a":"1","b":"2","c":"3"}
# 1  {"a" :"4","b":"5","c":"6"}

Метод:

Как только df будет в указанном выше формате, нижеприведенная запись преобразует каждую запись строки в словарь:

df['json'] = df['json'].map(lambda x: dict(eval(x)))

Затем, применение pd.Series к столбцу сделает работу

d = df['json'].apply(pd.Series)
print(d)
#   a  b  c
# 0  1  2  3
# 1  4  5  6
0 голосов
/ 02 июня 2018

Если вы используете фреймы данных в пандах, вы можете использовать одну из библиотечных функций, известную как from_dict , которая создает фрейм данных из словаря.

Если ваши данные представляют собой json, вы можете легко преобразовать их в dict с помощью библиотеки json.

import json
import pandas 

my_dict = json.loads({"a" ;"4","b":"5","c":"6"})
pandas.DataFrame.from_dict(my_dict)

Вы можете применить эту логику к своим строкам.

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