Как извлечь столбцы для словаря, которые не имеют ключей - PullRequest
0 голосов
/ 04 мая 2020

поэтому я попробовал ресурсы о том, как преобразовать dict во фрейме данных, но проблема в том, что это странный Dict.

это не похоже на key: {} , key: {} and etc..

данные имеют много элементов. Но цель состоит в том, чтобы извлечь только содержимое внутри dict {}, если возможно, даты также являются плюсом.

data:

id,client,source,status,request,response,queued,created_at,updated_at
54252,sdf,https://asdasdadadad,,"{
    "year": "2010",
    "casa": "aca",
    "status": "p",
    "Group": "57981",
}",,1,"2020-05-02 11:06:17","2020-05-02 11:06:17"
54252,msc-lp,https://discover,,"{
    "year": "27",
    "casa": "Na",
    "status": "p",
    "Group": "57981",
}"

мои попытки:

#attempt 1
with open('data.csv') as fd:
    pairs = (line.split(None) for line in fd)
    res   = {int(pair[0]):pair[1] for pair in pairs if len(pair) == 2 and pair[0].isdigit()}



#attempt 2
import json

# reading the JSON data using json.load()
file = 'data.json'
with open(file) as train_file:
    dict_train = json.load(train_file)

# converting json dataset from dictionary to dataframe
train = pd.DataFrame.from_dict(dict_train, orient='index')
train.reset_index(level=0, inplace=True)


#attempt 3
df = pd.read_csv("data.csv")
df = df.melt(id_vars=["index", "Date"], var_name="variables",value_name="values")

Ничто не работает, потому что данные странной формы

Ожидаемый результат:
Все элементы в словаре, каждый ключ будет одним столбцом в df

Date                     year  casa  status    Group
2020-05-02 11:06:17     2010   aca    p       57981
2020-05-02 11:06:17      27     Na    p       57981

1 Ответ

1 голос
/ 04 мая 2020

Форматирование данных в допустимую структуру CSV:

id,client,source,status,request,response,queued,created_at,updated_at
54252,sdf,https://asdasdadadad,,'{ "ag": "2010", "ca": "aca", "ve": "p", "Group": "57981" }',,1,"2020-05-02 11:06:17","2020-05-02 11:06:17"
54252,msc-lp,https://discover,,'{ "ag": "27", "ca": "Na", "ve": "p", "Group": "57981" }',,1,"2020-05-02 11:06:17","2020-05-02 11:06:17"

Это должно работать и для наихудшего сценария, проверьте это.

import json
import pandas as pd

def parse_column(data):
    try:
        return json.loads(data)
    except Exception as e:
        print(e)
        return None



df =pd.read_csv('tmp.csv',converters={"request":parse_column}, quotechar="'")
...