Nếu bạn chỉ đang cố gắng để có được một biểu diễn chuỗi đẹp của mảng của mình và sử dụng loại mảng chuỗi không cung cấp cho bạn biểu diễn bạn muốn, thì định dạng tuần tự hóa thông báo không phải là thứ cần sử dụng. Các định dạng tuần tự hóa là để lưu/truyền dữ liệu. JSON rất tốt ở chỗ nó cũng thường có thể đọc được, nhưng đó không phải là mục đích, và buộc nó thành một định dạng khác sẽ làm cho nó không còn là một bài tuần tự JSON. Ngay cả các tùy chọn savetxt và loadTXT sẽ không hoạt động cho định dạng mà bạn muốn [lặp lại hàng đầu tiên cho mỗi cột]. Bạn có thể thực hiện tuần tự hóa của riêng mình nếu nó phải ở định dạng đó bằng cách sử dụng mã sau:
def prettySerialize[inArray]:
ids = inArray[0]
strRep = ''
for row in inArray[1:]:
for i,item in enumerate[row]:
rowStr = id[i] + ':' + item + '\n'
strRep += rowStr
return strRep
Vấn đề với điều này là nó sẽ chậm hơn nhiều và biểu diễn lớn hơn nhiều của mảng [lặp lại hàng "ID" nhiều lần]. Tôi rất khuyên bạn nên đi với một giải pháp JSON [hoặc MSGPack] thuần túy trừ khi bạn đặc biệt định dạng điều này để đọc của con người ...
Đây là một giải pháp tôi đang sử dụng để tuần tự hóa với MSGPACK [cũng sẽ hoạt động với JSON] ... Chuyển đổi thành một tuple bao gồm DTYPE và hình dạng mảng:
def arrayToTuple[arr]:
if arr is None:
return None
return [arr.dtype.str, arr.shape, arr.tostring[]]
def arrayFromTuple[tupl]:
if tupl is None:
return None
typeStr, shape, dataStr = tupl
resultArray = numpy.fromstring[dataStr, dtype=typeStr].reshape[shape]
return resultArray
Vì vậy, các lệnh và các lệnh tải sẽ là:
strRep = json.dumps[arrayToTuple[arr]]
arrayFromTuple[json.loads[strRep]]
Và điều này cũng hoạt động cho MsgPack.Dumps và MsgPack.Loads [một biểu diễn nhị phân nhỏ gọn hơn nhanh hơn].
Một cảnh báo có thể được áp dụng cho mảng của bạn: nếu mảng numpy của bạn là một đối tượng DTYPE thì nó sẽ không tuần tự hóa bằng các phương thức tiêu chuẩn như một mảng đầy đủ. Bạn sẽ phải tuần tự hóa từng đối tượng riêng lẻ vì ID đối tượng, không phải dữ liệu, được lưu trữ trong mảng. Sử dụng dtype làm dtype = '| s' trong đó độ dài chuỗi tối đa sẽ làm cho mảng serializable.
Trong bài đăng này, chúng tôi sẽ học cách chuyển đổi mảng numpy thành json python bằng các ví dụ. Sử dụng & nbsp; Cài đặt Pip Pip Jsonlib-python3. imported using “import JSON“, First need to make sure the JSON module is installed or we can install it using “pip install jsonlib-python3” .NumPy land Pandas Library.
1. Chuyển đổi mảng numpy thành json python
Trong Python Exmple này, chúng tôi đang chuyển đổi một mảng numpy thành JSON và lưu trữ nó thành tệp JSON. Bằng cách hiểu danh sách được sử dụng để ghi vào tệp JSON bằng phương thức json.dump [data, fileObj].json.dump[data, Fileobj] method.
import numpy as np import json myarr = np.array[[['Jack', 7, 44], ['rack', 13, 35], ['Sham', 13, 35]]] lists = myarr.tolist[] data = [{'Name': item[0], 'Age': item[1], 'Data': item[2]} for i, item in enumerate[lists]] print[data] with open['myJsonfile', 'w'] as FileObj: json.dump[data, Fileobj]
Đầu ra
[{'Name': 'Jack', 'Age': '7', 'Data': '44'}, {'Name': 'rack', 'Age': '13', 'Data': '35'}, {'Name': 'Sham', 'Age': '13', 'Data': '35'}]
- Cách xác thực dữ liệu JSON trong Python
- Cách xác nhận lược đồ JSON trong Python
2. Chuyển đổi mảng numpy thành json python
Trong chương trình Python này, chúng tôi đã xác định numpyencoder [], tham số đầu tiên cho json.dump [] là mảng numpy [myarr] và tham số thứ hai là và chúng tôi gán chức năng numpyencoder cho mặc định = numpyencoder..let chúng tôi hiểu bằng ví dụNumpyEncoder function to default=NumpyEncoder..Let us understand with Example
import json import numpy as np myarr = np.array[[['Jack', 7, 44],['rack', 13, 35],['Sham', 13, 35]]] class NumpyEncoder[json.JSONEncoder]: def default[self, myobj]: if isinstance[myobj, np.integer]: return int[myobjobj] elif isinstance[myobj, np.floating]: return float[myobj] elif isinstance[myobj, np.ndarray]: return myobj.tolist[] return json.JSONEncoder.default[self, myobj] numpytoJson = json.dumps[myarr, cls=NumpyEncoder] print[numpytoJson] #reading JSON data JSONToNUmpy = json.loads[numpytoJson] print['JSON to NUmpy:',JSONToNUmpy]
Đầu ra
[["Jack", "7", "44"], ["rack", "13", "35"], ["Sham", "13", "35"]] JSON to NUmpy [['Jack', '7', '44'], ['rack', '13', '35'], ['Sham', '13', '35']]
3. Pandas để chuyển đổi mảng numpy thành json python
Chúng tôi đã sử dụng phương thức Pandas libaray to_json [] để chuyển đổi mảng numpy thành json.first, chúng tôi đã tạo một dataFrame từ mảng numpy với chỉ mục và cột và sử dụng đối tượng DataFrame để gọi phương thức to_json [] với tham số adp indexIndex and columns and use dataframe object to call the to_json[] method with parameter orient=’index’
import pandas as pd import numpy myarr = np.array[[['Jack', 7, 44],['rack', 13, 35],['Sham', 13, 35]]] dfobj = pd.DataFrame[myarr, index=['row 1', 'row 2','row 3'], columns=['Name', 'Age', 'Data']] dfobj = dfobj.to_json[orient='index'] print["NumPy array to Json:"] print[dfobj]
Đầu ra
NumPy array to Json: {"row 1":{"Name":"Jack","Age":"7","Data":"44"},"row 2":{"Name":"rack","Age":"13","Data":"35"},"row 3":{"Name":"Sham","Age":"13","Data":"35"}}
4. Pandas chuyển đổi mảng numpy thành JSON Erient bằng các giá trị
Chúng tôi đã sử dụng phương thức Pandas libaray to_json [] để chuyển đổi mảng numpy thành json. Trước khi chúng tôi đã tạo một khung dữ liệu từ mảng numpy với chỉ mục và cột và sử dụng đối tượng DataFrame để gọi phương thức to_json [] với các giá trị tham số =Index and columns and use dataframe object to call the to_json[] method with parameter orient=’Values’ instead of index
import pandas as pd import numpy myarr = np.array[[['Jack', 7, 44],['rack', 13, 35],['Sham', 13, 35]]] dfobj = pd.DataFrame[myarr, index=['row 1', 'row 2','row 3'], columns=['Name', 'Age', 'Data']] dfobj = dfobj.to_json[orient='values'] print["NumPy array to Json:"] print[dfobj]
Đầu ra
def arrayToTuple[arr]:
if arr is None:
return None
return [arr.dtype.str, arr.shape, arr.tostring[]]
def arrayFromTuple[tupl]:
if tupl is None:
return None
typeStr, shape, dataStr = tupl
resultArray = numpy.fromstring[dataStr, dtype=typeStr].reshape[shape]
return resultArray
05. Pandas chuyển đổi mảng numpy thành JSON Erient bằng các giá trị
Trong ví dụ chương trình Python này, chúng tôi đã sử dụng thư viện Pandas, trước tiên, chúng tôi đã cài đặt nó trên hệ thống cục bộ và được nhập bằng cách sử dụng phương pháp. Đầu tiên, chúng tôi đã tạo một khung dữ liệu từ mảng numpy với chỉ mục và cột và sử dụng đối tượng khung dữ liệu để gọi phương thức to_json [] với tham số Orient = xông Split, thay vì chỉ mục và các giá trịto_json[] method with parameter orient=’split’ instead of index and values
def arrayToTuple[arr]:
if arr is None:
return None
return [arr.dtype.str, arr.shape, arr.tostring[]]
def arrayFromTuple[tupl]:
if tupl is None:
return None
typeStr, shape, dataStr = tupl
resultArray = numpy.fromstring[dataStr, dtype=typeStr].reshape[shape]
return resultArray
1Đầu ra
def arrayToTuple[arr]:
if arr is None:
return None
return [arr.dtype.str, arr.shape, arr.tostring[]]
def arrayFromTuple[tupl]:
if tupl is None:
return None
typeStr, shape, dataStr = tupl
resultArray = numpy.fromstring[dataStr, dtype=typeStr].reshape[shape]
return resultArray
2Bản tóm tắt
Trong bài đăng này, chúng tôi đã học được cách chuyển đổi mảng numpy thành JSON Python bằng cách sử dụng mô -đun JSON, Numpy và Pandas.