python 常用方法整理
一、计算分页
import pandas as pd
import time
import sys
import math
# 一个变量占用字节数
character_occupy_byte = 8.2
def calculat_page_size(var_count, var_max_mem, character_occupy_byte):
"""
计算分页大小
:param var_count: 变量数
:param var_max_mem: 一个变量(对象)可占用的最大内存,单位为byte
:param character_occupy_byte: 一个字符占用的字节数,在Python中一个字符占用 8 个字节
:return:
"""
# 计算分页数
page_size = math.ceil((var_max_mem / var_count) / character_occupy_byte)
return page_size
def significant(num, signum):
"""
将最后几位用0代替
示例:计算的为 120921,保留signum 为 1,则优化后的为100000;
:param num: 需要优化的数
:param signum: 保留几位数
:return:
"""
expo = 10 ** (int(math.log(num, 10)) - signum + 1)
return expo * (num // expo)
def main():
# df = pd.read_csv("./train.csv")
var_max_mem = 10000000 # 10M, 20000000
var_count = 6
page_size = calculat_page_size(var_count, var_max_mem, character_occupy_byte)
print("计算的分页获取条数:", page_size)
sign_page_size = significant(page_size, 2)
# 为了便于计算,将零头抹掉
print("计算的分页数获取条数(优化):", sign_page_size)
if __name__ == '__main__':
main()
二、dataframe转为json
Pandas DataFrames 是数据的表格表示,其中列代表单个数据条目中的各种数据点,每一行都是唯一的数据条目。而 JSON 是用 JavaScript 对象表示法编写的文本。
将 Pandas DataFrame 转换为 JSON
要将 Pandas DataFrames 转换为 JSON 格式,我们使用 DataFrame.to_json() Python 中Pandas库中的函数。to_json 函数中有多个自定义项可用于实现所需的 JSON 格式。看一下函数接受的参数,再探讨定制
参数:
示例:
import numpy as np
import pandas as pd
data = np.array([['1', '2'], ['3', '4']])
dataFrame = pd.DataFrame(data, columns = ['col1', 'col2'])
json = dataFrame.to_json()
print(json)
json_split = dataFrame.to_json(orient ='split')
print("json_split = ", json_split, "\n")
json_records = dataFrame.to_json(orient ='records')
print("json_records = ", json_records, "\n")
json_index = dataFrame.to_json(orient ='index')
print("json_index = ", json_index, "\n")
json_columns = dataFrame.to_json(orient ='columns')
print("json_columns = ", json_columns, "\n")
json_values = dataFrame.to_json(orient ='values')
print("json_values = ", json_values, "\n")
json_table = dataFrame.to_json(orient ='table')
print("json_table = ", json_table, "\n")
输出:
json_split = {“columns”:[“col1”, “col2”], “index”:[0, 1], “data”:[[“1”, “2”], [“3”, “4”]]}
json_records = [{“col1″:”1”, “col2″:”2”}, {“col1″:”3”, “col2″:”4”}]
json_index = {“0”:{“col1″:”1”, “col2″:”2”}, “1”:{“col1″:”3”, “col2″:”4”}}
json_columns = {“col1”:{“0″:”1”, “1”:”3″}, “col2”:{“0″:”2”, “1”:”4″}}
json_values = [[“1”, “2”], [“3”, “4”]]
json_table = {“schema”:{“fields”:[{“name”:”index”, “type”:”integer”}, {“name”:”col1″, “type”:”string”}, {“name”:”col2″, “type”:”string”}], “primaryKey”:[“index”], “pandas_version”:”0.20.0″}, “data”:[{“index”:0, “col1″:”1”, “col2″:”2”}, {“index”:1, “col1″:”3”, “col2″:”4”}]}
JSON 字符串的格式:
- 'split' : dict like {'index' -> [index], 'columns' -> [columns],
'数据' -> [值]}
- 'records' : list like [{column -> value}, ... , {column -> value}]
- 'index' : dict like {index -> {column -> value}}
- 'columns' : dict like {column -> {index -> value}}
- 'values' : 只是值数组
- 'table' : dict like {'schema': {schema}, 'data': {data}}
原文档介绍:
"""
将对象转换为 JSON 字符串。
注意 NaN 和 None 将被转换为 null 和 datetime 对象
将转换为 UNIX 时间戳。
参数
----------
path_or_buf : str 或文件句柄,可选
文件路径或对象。如果未指定,则返回结果为
一个字符串。
东方:str
指示预期的 JSON 字符串格式。
* 系列:
- 默认为“索引”
- 允许的值为:{'split','records','index','table'}。
* 数据框:
- 默认为“列”
- 允许的值为:{'split'、'records'、'index'、'columns'、
'值','表'}。
* JSON 字符串的格式:
- 'split' : dict like {'index' -> [index], 'columns' -> [columns],
'数据' -> [值]}
- 'records' : list like [{column -> value}, ... , {column -> value}]
- 'index' : dict like {index -> {column -> value}}
- 'columns' : dict like {column -> {index -> value}}
- 'values' : 只是值数组
- 'table' : dict like {'schema': {schema}, 'data': {data}}
描述数据,其中数据组件就像“orient='records'”。
.. 版本已更改:: 0.20.0
日期格式:{无,'纪元','iso'}
日期转换类型。 'epoch' = 纪元毫秒,
'iso' = ISO8601。默认值取决于`orient`。为了
``orient='table'``,默认为'iso'。对于所有其他方向,
默认值为“纪元”。
double_precision :int,默认为 10
编码时使用的小数位数
浮点值。
force_ascii : bool,默认为 True
强制编码字符串为 ASCII。
date_unit :str,默认'ms'(毫秒)
编码到的时间单位,控制时间戳和 ISO8601
精确。 's'、'ms'、'us'、'ns' 之一表示秒、毫秒、
分别为微秒和纳秒。
default_handler :可调用,默认无
如果对象不能以其他方式转换为
JSON 的合适格式。应该接收一个参数是
要转换并返回可序列化对象的对象。
行:布尔值,默认为假
如果 'orient' 是 'records' 写出行分隔的 json 格式。将要
如果“东方”不正确,则抛出 ValueError,因为其他人未列出
喜欢。
压缩:{'推断'、'gzip'、'bz2'、'zip'、'xz'、无}
表示在输出文件中使用的压缩的字符串,
仅在第一个参数是文件名时使用。默认情况下,
从文件名推断压缩。
.. 版本添加:: 0.21.0
.. 版本已更改:: 0.24.0
添加了“推断”选项并设置为默认值
索引:布尔值,默认为真
是否在 JSON 字符串中包含索引值。不是
仅在以下情况下才支持包含索引 (``index=False``)
orient 是 'split' 或 'table'。
.. 版本已添加:: 0.23.0
缩进:整数,可选
用于缩进每条记录的空格长度。
.. 版本已添加:: 1.0.0
退货
-------
无或 str
如果 path_or_buf 为 None,则返回生成的 json 格式作为
细绳。否则返回无。
也可以看看
--------
读取_json
笔记
-----
``indent=0`` 的行为与 stdlib 不同,它不
缩进输出但确实插入换行符。目前,“缩进=0”
和默认的“缩进=无”在熊猫中是等价的,尽管这
在未来的版本中可能会改变。
例子
--------
>>> df = pd.DataFrame([['a', 'b'], ['c', 'd']],
... index=['第 1 行','第 2 行'],
... columns=['col 1', 'col 2'])
>>> df.to_json(orient='split')
'{"columns":["col 1","col 2"],
“索引”:[“第 1 行”,“第 2 行”],
"数据":[["a","b"],["c","d"]]}'
使用“记录”格式的 JSON 编码/解码数据帧。
请注意,此编码不会保留索引标签。
>>> df.to_json(orient='记录')
'[{"col 1":"a","col 2":"b"},{"col 1":"c","col 2":"d"}]'
使用“索引”格式的 JSON 编码/解码数据帧:
>>> df.to_json(orient='index')
'{"row 1":{"col 1":"a","col 2":"b"},"row 2":{"col 1":"c","col 2":"d" }}'
使用“列”格式的 JSON 编码/解码数据帧:
>>> df.to_json(orient='columns')
'{"col 1":{"row 1":"a","row 2":"c"},"col 2":{"row 1":"b","row 2":"d" }}'
编码/d
相关文章:
Python 中将 Pandas DataFrame 转换为 JSON?
为者常成,行者常至
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)