python数据分析实践(一)

记第一次运用Python对JSON格式文件进行数据处理

关于导入json文件的问题

  • 导入数据
import json
	fp = open('abcd.json')     # 打开文件
	file_data = fp.readlines() # 按行读,导入数据
	fp.close()                 # 关闭文件

考虑不要按行读取数据,而是运用json自带的load()函数,对文件进行整体处理。

import json
with open("abcd.json",'r') as load_f:
     load_dict = json.load(load_f)

但是出现报错
json.decoder.JSONDecodeError: Extra data: line 2 column 1 (char 1243)

  • 原因分析
    In the json lib ->decoder.py->decode function
if end != len(s):
	raise ValueError(errmsg("Extra data", s, end, len(s)))

解码json文件时,在文件本该结束的地方,文件却没有结束,便会报extra data的错误。对于我所解码的“abcd.json”文件,每一行是一个json格式的str数据,但是整体看的时候,它就不再是一个str,而是多个str的集合。load()函数解码完第一行看到"}",发现文件应该结束了,结果发现还有第二行,所有报错extra data.

  • 小结
    导入数据时,根据数据的格式采取相应的办法。这就意味着在处理数据之前,我们需要完全地了解我们所要处理的数据。

利用pandas的dataframe进行数据重建

  • pandas.dataframe官方指南

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html

class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)

Two-dimensional size-mutable, potentially heterogeneous tabular data structure with labeled axes (rows and columns). Arithmetic operations align on both row and column labels. Can be thought of as a dict-like container for Series objects. The primary pandas data structure.
dataframe是一种二维的大小可变,成分混杂的列表数据结构,并且每个维度都带有标签(行和列),可以对行列进行算术运算的操作。dataframe可以被认为是一种用于容纳Series object的类似字典数据类型的容器,它是pandas最基本和主要的数据结构。

parameters

data : numpy ndarray (structured or homogeneous), dict, or DataFrame

Dict can contain Series, arrays, constants, or list-like objects

index: Index or array-like

Index to use for resulting frame. Will default to np.arange(n) if no indexing information part of input data and no index provided

columns : Index or array-like

Column labels to use for resulting frame. Will default to np.arange(n) if no column labels are provided

dtype : dtype, default None

Data type to force, otherwise infer

copy : boolean, default False

Copy data from inputs. Only affects DataFrame / 2d ndarray input

至此是对pandas.dataframe官方指南的抄录和翻译。

  • json原数据的整理和重建
import pandas as pd

def is_json(data):    # 判断是否为 json 格式
    try:
        json.loads(data)
    except ValueError:
        return False
    return True
    
# 建立一个空的 dataframe
df = pd.DataFrame(columns = ['Session','qhBegin','qhEnd','qhId','k1','k2','k3','k4','k5','k6','m2'])
# index = 1
for i in range(len(file_data)):
    if is_json(file_data[i]):
        json_data = json.loads(file_data[i])    # 变换数据类型,字符串变成字典
        if 'event' in list(json_data.keys()):
            event = json_data.get('event')         # 取key为event的value
            key_value = list(event.keys())          # 取出event字典里的keys,并转换为list
            Se = key_value[0]                       # 取出Session号
            event_data = event.get(Se)                    # 取出event数据
            dev_num = json_data.get('header').get('m2')  #取出设备号
            for j in range(len(event_data)):
                undata = event_data[j]
                # 取出event_data里的所有数据
                # qhBegin
                if 'qhBegin' in list(undata.keys()):
                    qhBegin = undata.get('qhBegin')
                else:
                    qhBegin =
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值