当前位置: 首页>数据库>正文

python中把json转成字符串 python json转csv

前两天读GitHub上的新冠肺炎的时间数据仓库的代码,他是将要写入的数据保存在他自己的mongodb的数据库里了,就想自己转一下json到csv,结果弄了半天没弄成,烦得要死,现在静下来,好好打一下这几个库模块的基础。

一、demjson库:(其实就相当于json模块的dumps和loads,其价值在于可以解析不规则的json数据)
endode:将python对象编码成json字符串
decode:将已编码的json字符串解码成python对象
解析不规则的json数据如:

# javascript中的对象
js_json = "{x:1, y:2, z:3}"
 
# python打印出来的字典
py_json1 = "{'x':1, 'y':2, 'z':3}"

二、csv库
这里有一个小点:在写入表格文件时(如xlsx或csv),写入‘,’为换一列,写入‘\n’为换一行(不过这里的返回值是什么鬼,还没仔细翻python文档)
**reader(csvfile, dialect=‘excel’, fmtparams)
csvfile,必须是支持迭代(Iterator)的对象,可以是文件(file)对象或者列表(list)对象,如果是文件对象,打开时需要加"b"标志参数。

import csv
with open('test.csv','rb') as myFile:
    lines=csv.reader(myFile)
    for line in lines:
        print line

如上所述,输出时同一行的,用逗号隔开。
**writer(csvfile, dialect=‘excel’, fmtparams)
writerow()方法是一行一行写入,writerows方法是一次写入多行。
writerow()逗号分隔每一列,writerows()每个列表分割一行(字典样式的读写里面似乎并不支持witerows方法)
字典样式的读写
csv.DictReader(csvfile, fieldnames=None, restkey=None, restval=None, dialect=‘excel’, *args, **kwds)
csv.DictWriter(csvfile, fieldnames, restval=’’, extrasaction=‘raise’, dialect=‘excel’, *args, **kwds)
实例:

# 读
>>> import csv
>>> with open('names.csv') as csvfile:
...     reader = csv.DictReader(csvfile)
...     for row in reader:
...         print(row['first_name'], row['last_name'])
...
Baked Beans
Lovely Spam
Wonderful Spam


# 写

import csv
with open('names.csv', 'w') as csvfile:
    fieldnames = ['first_name', 'last_name']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writeheader()
    writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
    writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})
    writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})

三、pandas库详细的这个库的解析这里挂上一个博客的网址:
link有一些其他的更详细的方法,用到的时候可以去参考一下
创建一个数据通常使用两种方法,pd.Series和创建表格型数据pd.DataFrame
下面有两个实例:

s=pd.Series([1,2,3,np.nan,5,6])
print(s)#索引在左边 值在右边
'''
0    1.0
1    2.0
2    3.0
3    NaN
4    5.0
5    6.0
dtype: float64
 '''
dates=pd.date_range('20180310',periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=['A','B','C','D'])#生成6行4列位置
print(df)#输出6行4列的表格
'''
                   A         B         C         D
2018-03-10 -0.092889 -0.503172  0.692763 -1.261313
2018-03-11 -0.895628 -2.300249 -1.098069  0.468986
2018-03-12  0.084732 -1.275078  1.638007 -0.291145
2018-03-13 -0.561528  0.431088  0.430414  1.065939
2018-03-14  1.485434 -0.341404  0.267613 -1.493366
2018-03-15 -1.671474  0.110933  1.688264 -0.910599
  '''

在选择数据集的方式上面类似于二维数组
主要有两种方法:
按照标签进行选择:

print(df.loc['20180312', ['A','B']])#按照行标签进行选择 精确选择
 '''
A    0.499960
B    1.576897
Name: 2018-03-12 00:00:00, dtype: float64
'''

按照iloc行号进行选择:

print(df.iloc[3, 1])#输出第三行第一列的数据
#0.427336827399

print(df.iloc[3:5,0:2])#进行切片选择
 '''
                   A         B
2018-03-13  0.540385  0.427337
2018-03-14  0.191962  1.237843
 '''

print(df.iloc[[1,2,4],[0,2]])#进行不连续筛选
'''
                   A         C
2018-03-11  0.332656  0.382384
2018-03-12  0.499960  2.128730
2018-03-14  0.191962  1.903370
 '''

对数据集里面的标签,另可根据判断筛选数据集里面的元素:

print(df[df.A > 0])#筛选出df.A大于0的元素 布尔条件筛选
'''
                   A         B         C         D
2018-03-11  0.332656 -0.094633  0.382384 -0.914339
2018-03-12  0.499960  1.576897  2.128730  2.197465
2018-03-13  0.540385  0.427337 -0.591381  0.126503
2018-03-14  0.191962  1.237843  1.903370  2.155366
 '''

另外对数据进行选择之后,如上所述iloc与loc选择,可同时进行修改:

print(df)
'''
             A   B     C   D
2018-03-10   0   1     2   3
2018-03-11   4   5     6   7
2018-03-12   8   9  1111  11
2018-03-13  12  13    14  15
2018-03-14  16  17    18  19
2018-03-15  20  21    22  23
'''

df.iloc[2,2] = 999#单点设置
df.loc['2018-03-13', 'D'] = 999
print(df)
'''
            A   B    C    D
2018-03-10  0   1    2    3
2018-03-11  0   5    6    7
2018-03-12  0   9  999   11
2018-03-13  0  13   14  999
2018-03-14  0  17   18   19
2018-03-15  0  21   22   23
'''

链接里面另有更详细的方法与叙述,这里不再赘述。



https://www.xamrdz.com/database/6y61937405.html

相关文章: