Tôi có một tệp văn bản mà tôi đang cố ghi vào tệp JSON. Một số giá trị được trả về là Không có, Đúng hoặc Sai. Tôi cần thay thế Không có bằng "Không" (chuỗi), Đúng bằng "Đúng" và Sai bằng "Sai"
Tôi đã thử thêm dòng
data=data.replace(None,"None")Tuy nhiên, tôi nhận được một lỗi
Traceback (most recent call last): File "parse_get_drivers.py", line 17, in data=data.replace(None,"None") TypeError: replace() argument 1 must be str, not Noneimport json import re from pprint import pprint import pandas as pd inHandler = open('get_drivers.txt', 'r') outHandler = open('drivers.json', 'w') data = '' for line in inHandler.readlines(): print('src:' + line) line = line.replace("}]},","}]},\r") data += line print('replace:' + line) data=data.replace("'", '"') data=data.replace(None,"None") outHandler.write(data) inHandler.close() outHandler.close()Đây là kịch bản của tôi
Kết quả yêu cầu là thay thế các giá trị Không, Đúng và Sai bằng "Không", "Đúng" và "Sai"
def replace_none(idx, dim): """ Normalize slices to canonical form, i.e. replace ``None`` with the appropriate integers. Parameters ---------- idx: slice or other index dim: dimension length Examples -------- >>> replace_none(slice(None, None, None), 10) slice(0, 10, 1) """ if not isinstance(idx, slice): return idx start, stop, step = idx.start, idx.stop, idx.step if step is None: step = 1 if step > 0: if start is None: start = 0 if stop is None: stop = dim else: if start is None: start = dim - 1 if stop is None: stop = -1 return slice(start, stop, step)Điều này khác với việc cập nhật bằng >>> df = pd.DataFrame({'A': [0, 1, 2, 3, 4], .. 'B': [5, 6, 7, 8, 9], .. 'C': ['a', 'b', 'c', 'd', 'e']}) >>> df.replace(0, 5) A B C 0 5 5 a 1 1 6 b 2 2 7 c 3 3 8 d 4 4 9 e 7 hoặc >>> df = pd.DataFrame({'A': [0, 1, 2, 3, 4], .. 'B': [5, 6, 7, 8, 9], .. 'C': ['a', 'b', 'c', 'd', 'e']}) >>> df.replace(0, 5) A B C 0 5 5 a 1 1 6 b 2 2 7 c 3 3 8 d 4 4 9 e 8, vốn yêu cầu bạn chỉ định một vị trí để cập nhật một số giá trị
Parametersto_replace str, regex, list, dict, Series, int, float hoặc KhôngCách tìm các giá trị sẽ được thay thế
số, str hoặc regex
con số. giá trị số bằng to_replace sẽ được thay thế bằng giá trị
str. chuỗi khớp chính xác với to_replace sẽ được thay thế bằng giá trị
biểu thức chính quy. biểu thức chính quy khớp với to_replace sẽ được thay thế bằng giá trị
danh sách str, regex hoặc số
Đầu tiên, nếu to_replace và value đều là danh sách, chúng phải có cùng độ dài
Thứ hai, nếu >>> df = pd.DataFrame({'A': [0, 1, 2, 3, 4], .. 'B': [5, 6, 7, 8, 9], .. 'C': ['a', 'b', 'c', 'd', 'e']}) >>> df.replace(0, 5) A B C 0 5 5 a 1 1 6 b 2 2 7 c 3 3 8 d 4 4 9 e 9 thì tất cả các chuỗi trong cả hai danh sách sẽ được hiểu là biểu thức chính quy nếu không chúng sẽ khớp trực tiếp. Điều này không quan trọng lắm đối với giá trị vì chỉ có một vài biểu thức thay thế khả thi mà bạn có thể sử dụng
quy tắc str, regex và số áp dụng như trên
mệnh lệnh
Dicts có thể được sử dụng để chỉ định các giá trị thay thế khác nhau cho các giá trị hiện có khác nhau. Ví dụ: >>> df.replace([0, 1, 2, 3], 4) A B C 0 4 5 a 1 4 6 b 2 4 7 c 3 4 8 d 4 4 9 e 0 thay thế giá trị 'a' bằng 'b' và 'y' bằng 'z'. Để sử dụng lệnh theo cách này, không nên cung cấp tham số giá trị tùy chọn
Đối với DataFrame, một lệnh có thể chỉ định rằng các giá trị khác nhau sẽ được thay thế trong các cột khác nhau. Ví dụ: >>> df.replace([0, 1, 2, 3], 4) A B C 0 4 5 a 1 4 6 b 2 4 7 c 3 4 8 d 4 4 9 e 1 tìm kiếm giá trị 1 trong cột 'a' và giá trị 'z' trong cột 'b' và thay thế các giá trị này bằng bất kỳ giá trị nào được chỉ định trong giá trị. Tham số giá trị không nên là >>> df.replace([0, 1, 2, 3], 4) A B C 0 4 5 a 1 4 6 b 2 4 7 c 3 4 8 d 4 4 9 e 2 trong trường hợp này. Bạn có thể coi đây là trường hợp đặc biệt khi chuyển hai danh sách ngoại trừ việc bạn đang chỉ định cột để tìm kiếm trong đó
Đối với từ điển lồng nhau DataFrame, e. g. , >>> df.replace([0, 1, 2, 3], 4) A B C 0 4 5 a 1 4 6 b 2 4 7 c 3 4 8 d 4 4 9 e 3, được đọc như sau. tìm trong cột 'a' cho giá trị 'b' và thay thế nó bằng NaN. Không nên chỉ định tham số giá trị tùy chọn để sử dụng lệnh lồng nhau theo cách này. Bạn cũng có thể lồng các biểu thức chính quy. Lưu ý rằng tên cột (các khóa từ điển cấp cao nhất trong từ điển lồng nhau) không thể là biểu thức chính quy
Không có
Điều này có nghĩa là đối số biểu thức chính quy phải là một chuỗi, biểu thức chính quy được biên dịch hoặc danh sách, dict, ndarray hoặc Chuỗi các phần tử đó. Nếu giá trị cũng là >>> df.replace([0, 1, 2, 3], 4) A B C 0 4 5 a 1 4 6 b 2 4 7 c 3 4 8 d 4 4 9 e 2 thì đây phải là từ điển lồng nhau hoặc Sê-ri
Xem phần ví dụ để biết ví dụ về từng loại này
giá trị vô hướng, dict, danh sách, str, regex, mặc định Không cóGiá trị để thay thế bất kỳ giá trị nào khớp với to_replace bằng. Đối với DataFrame, một lệnh của các giá trị có thể được sử dụng để chỉ định giá trị nào sẽ sử dụng cho mỗi cột (các cột không có trong lệnh sẽ không được điền). Biểu thức chính quy, chuỗi và danh sách hoặc ký tự của các đối tượng đó cũng được phép
tại chỗ bool, mặc định SaiNếu Đúng, thực hiện thao tác tại chỗ và trả về Không có
giới hạn int, mặc định Không cóKhoảng cách kích thước tối đa để lấp đầy về phía trước hoặc phía sau
regex bool hoặc cùng loại với to_replace, mặc định SaiCó diễn giải to_replace và/hoặc giá trị dưới dạng biểu thức chính quy hay không. Nếu đây là >>> df.replace([0, 1, 2, 3], 4) A B C 0 4 5 a 1 4 6 b 2 4 7 c 3 4 8 d 4 4 9 e 5 thì to_replace phải là một chuỗi. Ngoài ra, đây có thể là một biểu thức chính quy hoặc một danh sách, chính tả hoặc mảng các biểu thức chính quy trong trường hợp to_replace phải là >>> df.replace([0, 1, 2, 3], 4) A B C 0 4 5 a 1 4 6 b 2 4 7 c 3 4 8 d 4 4 9 e 2
phương thức {'pad', 'fill', 'bfill'}Phương thức sử dụng khi thay thế, khi to_replace là một vô hướng, danh sách hoặc bộ dữ liệu và giá trị là >>> df.replace([0, 1, 2, 3], 4) A B C 0 4 5 a 1 4 6 b 2 4 7 c 3 4 8 d 4 4 9 e 2
Đã thay đổi trong phiên bản 0. 23. 0. Đã thêm vào DataFrame.
ReturnsSeriesĐối tượng sau khi thay thế
Tăng Xác nhận LỗiNếu regex không phải là >>> df.replace([0, 1, 2, 3], 4) A B C 0 4 5 a 1 4 6 b 2 4 7 c 3 4 8 d 4 4 9 e 8 và to_replace không phải là >>> df.replace([0, 1, 2, 3], 4) A B C 0 4 5 a 1 4 6 b 2 4 7 c 3 4 8 d 4 4 9 e 2
Nếu to_replace không phải là vô hướng, dạng mảng, Traceback (most recent call last): File "parse_get_drivers.py", line 17, in data=data.replace(None,"None") TypeError: replace() argument 1 must be str, not None 70 hoặc >>> df.replace([0, 1, 2, 3], 4) A B C 0 4 5 a 1 4 6 b 2 4 7 c 3 4 8 d 4 4 9 e 2
Nếu to_replace là một Traceback (most recent call last): File "parse_get_drivers.py", line 17, in data=data.replace(None,"None") TypeError: replace() argument 1 must be str, not None 70 và giá trị không phải là một Traceback (most recent call last): File "parse_get_drivers.py", line 17, in data=data.replace(None,"None") TypeError: replace() argument 1 must be str, not None 73, Traceback (most recent call last): File "parse_get_drivers.py", line 17, in data=data.replace(None,"None") TypeError: replace() argument 1 must be str, not None 70, Traceback (most recent call last): File "parse_get_drivers.py", line 17, in data=data.replace(None,"None") TypeError: replace() argument 1 must be str, not None 75 hoặc Traceback (most recent call last): File "parse_get_drivers.py", line 17, in data=data.replace(None,"None") TypeError: replace() argument 1 must be str, not None 76
Nếu to_replace là >>> df.replace([0, 1, 2, 3], 4) A B C 0 4 5 a 1 4 6 b 2 4 7 c 3 4 8 d 4 4 9 e 2 và regex không thể biên dịch thành biểu thức chính quy hoặc là danh sách, dict, ndarray hoặc Sê-ri
Khi thay thế nhiều đối tượng >>> df.replace([0, 1, 2, 3], 4) A B C 0 4 5 a 1 4 6 b 2 4 7 c 3 4 8 d 4 4 9 e 8 hoặc Traceback (most recent call last): File "parse_get_drivers.py", line 17, in data=data.replace(None,"None") TypeError: replace() argument 1 must be str, not None 79 và đối số to_replace không khớp với loại giá trị được thay thế
Nếu một Traceback (most recent call last): File "parse_get_drivers.py", line 17, in data=data.replace(None,"None") TypeError: replace() argument 1 must be str, not None 73 hoặc một Traceback (most recent call last): File "parse_get_drivers.py", line 17, in data=data.replace(None,"None") TypeError: replace() argument 1 must be str, not None 75 được chuyển đến to_replace và giá trị nhưng chúng không có cùng độ dài
Xem thêm
Điền giá trị NA
Thay thế các giá trị dựa trên điều kiện boolean
Thay dây đơn giản
ghi chú
Thay thế Regex được thực hiện dưới mui xe với import json import re from pprint import pprint import pandas as pd inHandler = open('get_drivers.txt', 'r') outHandler = open('drivers.json', 'w') data = '' for line in inHandler.readlines(): print('src:' + line) line = line.replace("}]},","}]},\r") data += line print('replace:' + line) data=data.replace("'", '"') data=data.replace(None,"None") outHandler.write(data) inHandler.close() outHandler.close() 95. Các quy tắc thay thế cho import json import re from pprint import pprint import pandas as pd inHandler = open('get_drivers.txt', 'r') outHandler = open('drivers.json', 'w') data = '' for line in inHandler.readlines(): print('src:' + line) line = line.replace("}]},","}]},\r") data += line print('replace:' + line) data=data.replace("'", '"') data=data.replace(None,"None") outHandler.write(data) inHandler.close() outHandler.close() 95 là như nhau
Các biểu thức chính quy sẽ chỉ thay thế trên các chuỗi, nghĩa là bạn không thể cung cấp, ví dụ: một biểu thức chính quy khớp với các số dấu phẩy động và mong đợi các cột trong khung của bạn có một kiểu số được khớp. Tuy nhiên, nếu các số dấu phẩy động đó là các chuỗi, thì bạn có thể thực hiện việc này
Phương pháp này có rất nhiều lựa chọn. Bạn được khuyến khích thử nghiệm và chơi với phương pháp này để có được trực giác về cách thức hoạt động của nó
Khi dict được sử dụng làm giá trị to_replace, nó giống như (các) khóa trong dict là phần to_replace và (các) giá trị trong dict là tham số giá trị
ví dụ
Vô hướng `to_replace` và `value`
def replace_none(idx, dim): """ Normalize slices to canonical form, i.e. replace ``None`` with the appropriate integers. Parameters ---------- idx: slice or other index dim: dimension length Examples -------- >>> replace_none(slice(None, None, None), 10) slice(0, 10, 1) """ if not isinstance(idx, slice): return idx start, stop, step = idx.start, idx.stop, idx.step if step is None: step = 1 if step > 0: if start is None: start = 0 if stop is None: stop = dim else: if start is None: start = dim - 1 if stop is None: stop = -1 return slice(start, stop, step) 1
>>> df = pd.DataFrame({'A': [0, 1, 2, 3, 4], .. 'B': [5, 6, 7, 8, 9], .. 'C': ['a', 'b', 'c', 'd', 'e']}) >>> df.replace(0, 5) A B C 0 5 5 a 1 1 6 b 2 2 7 c 3 3 8 d 4 4 9 e
Giống như danh sách `to_replace`
>>> df.replace([0, 1, 2, 3], 4) A B C 0 4 5 a 1 4 6 b 2 4 7 c 3 4 8 d 4 4 9 e
Traceback (most recent call last): File "parse_get_drivers.py", line 17, in data=data.replace(None,"None") TypeError: replace() argument 1 must be str, not None 7
import json import re from pprint import pprint import pandas as pd inHandler = open('get_drivers.txt', 'r') outHandler = open('drivers.json', 'w') data = '' for line in inHandler.readlines(): print('src:' + line) line = line.replace("}]},","}]},\r") data += line print('replace:' + line) data=data.replace("'", '"') data=data.replace(None,"None") outHandler.write(data) inHandler.close() outHandler.close() 9
giống như dict `to_replace`
def replace_none(idx, dim): """ Normalize slices to canonical form, i.e. replace ``None`` with the appropriate integers. Parameters ---------- idx: slice or other index dim: dimension length Examples -------- >>> replace_none(slice(None, None, None), 10) slice(0, 10, 1) """ if not isinstance(idx, slice): return idx start, stop, step = idx.start, idx.stop, idx.step if step is None: step = 1 if step > 0: if start is None: start = 0 if stop is None: stop = dim else: if start is None: start = dim - 1 if stop is None: stop = -1 return slice(start, stop, step) 6
def replace_none(idx, dim): """ Normalize slices to canonical form, i.e. replace ``None`` with the appropriate integers. Parameters ---------- idx: slice or other index dim: dimension length Examples -------- >>> replace_none(slice(None, None, None), 10) slice(0, 10, 1) """ if not isinstance(idx, slice): return idx start, stop, step = idx.start, idx.stop, idx.step if step is None: step = 1 if step > 0: if start is None: start = 0 if stop is None: stop = dim else: if start is None: start = dim - 1 if stop is None: stop = -1 return slice(start, stop, step) 7
def replace_none(idx, dim): """ Normalize slices to canonical form, i.e. replace ``None`` with the appropriate integers. Parameters ---------- idx: slice or other index dim: dimension length Examples -------- >>> replace_none(slice(None, None, None), 10) slice(0, 10, 1) """ if not isinstance(idx, slice): return idx start, stop, step = idx.start, idx.stop, idx.step if step is None: step = 1 if step > 0: if start is None: start = 0 if stop is None: stop = dim else: if start is None: start = dim - 1 if stop is None: stop = -1 return slice(start, stop, step) 8
Cụm từ thông dụng `to_replace`
def replace_none(idx, dim): """ Normalize slices to canonical form, i.e. replace ``None`` with the appropriate integers. Parameters ---------- idx: slice or other index dim: dimension length Examples -------- >>> replace_none(slice(None, None, None), 10) slice(0, 10, 1) """ if not isinstance(idx, slice): return idx start, stop, step = idx.start, idx.stop, idx.step if step is None: step = 1 if step > 0: if start is None: start = 0 if stop is None: stop = dim else: if start is None: start = dim - 1 if stop is None: stop = -1 return slice(start, stop, step) 9
>>> df = pd.DataFrame({'A': [0, 1, 2, 3, 4], .. 'B': [5, 6, 7, 8, 9], .. 'C': ['a', 'b', 'c', 'd', 'e']}) >>> df.replace(0, 5) A B C 0 5 5 a 1 1 6 b 2 2 7 c 3 3 8 d 4 4 9 e 0
>>> df = pd.DataFrame({'A': [0, 1, 2, 3, 4], .. 'B': [5, 6, 7, 8, 9], .. 'C': ['a', 'b', 'c', 'd', 'e']}) >>> df.replace(0, 5) A B C 0 5 5 a 1 1 6 b 2 2 7 c 3 3 8 d 4 4 9 e 0
>>> df = pd.DataFrame({'A': [0, 1, 2, 3, 4], .. 'B': [5, 6, 7, 8, 9], .. 'C': ['a', 'b', 'c', 'd', 'e']}) >>> df.replace(0, 5) A B C 0 5 5 a 1 1 6 b 2 2 7 c 3 3 8 d 4 4 9 e 1
>>> df = pd.DataFrame({'A': [0, 1, 2, 3, 4], .. 'B': [5, 6, 7, 8, 9], .. 'C': ['a', 'b', 'c', 'd', 'e']}) >>> df.replace(0, 5) A B C 0 5 5 a 1 1 6 b 2 2 7 c 3 3 8 d 4 4 9 e 2
So sánh hành vi của import json import re from pprint import pprint import pandas as pd inHandler = open('get_drivers.txt', 'r') outHandler = open('drivers.json', 'w') data = '' for line in inHandler.readlines(): print('src:' + line) line = line.replace("}]},","}]},\r") data += line print('replace:' + line) data=data.replace("'", '"') data=data.replace(None,"None") outHandler.write(data) inHandler.close() outHandler.close() 97 và import json import re from pprint import pprint import pandas as pd inHandler = open('get_drivers.txt', 'r') outHandler = open('drivers.json', 'w') data = '' for line in inHandler.readlines(): print('src:' + line) line = line.replace("}]},","}]},\r") data += line print('replace:' + line) data=data.replace("'", '"') data=data.replace(None,"None") outHandler.write(data) inHandler.close() outHandler.close() 98 để hiểu đặc thù của tham số to_replace
>>> df = pd.DataFrame({'A': [0, 1, 2, 3, 4], .. 'B': [5, 6, 7, 8, 9], .. 'C': ['a', 'b', 'c', 'd', 'e']}) >>> df.replace(0, 5) A B C 0 5 5 a 1 1 6 b 2 2 7 c 3 3 8 d 4 4 9 e 3
Khi một người sử dụng một dict làm giá trị to_replace, nó giống như (các) giá trị trong dict bằng với tham số giá trị. import json import re from pprint import pprint import pandas as pd inHandler = open('get_drivers.txt', 'r') outHandler = open('drivers.json', 'w') data = '' for line in inHandler.readlines(): print('src:' + line) line = line.replace("}]},","}]},\r") data += line print('replace:' + line) data=data.replace("'", '"') data=data.replace(None,"None") outHandler.write(data) inHandler.close() outHandler.close() 97 tương đương với def replace_none(idx, dim): """ Normalize slices to canonical form, i.e. replace ``None`` with the appropriate integers. Parameters ---------- idx: slice or other index dim: dimension length Examples -------- >>> replace_none(slice(None, None, None), 10) slice(0, 10, 1) """ if not isinstance(idx, slice): return idx start, stop, step = idx.start, idx.stop, idx.step if step is None: step = 1 if step > 0: if start is None: start = 0 if stop is None: stop = dim else: if start is None: start = dim - 1 if stop is None: stop = -1 return slice(start, stop, step) 60
>>> df = pd.DataFrame({'A': [0, 1, 2, 3, 4], .. 'B': [5, 6, 7, 8, 9], .. 'C': ['a', 'b', 'c', 'd', 'e']}) >>> df.replace(0, 5) A B C 0 5 5 a 1 1 6 b 2 2 7 c 3 3 8 d 4 4 9 e 4
Khi def replace_none(idx, dim): """ Normalize slices to canonical form, i.e. replace ``None`` with the appropriate integers. Parameters ---------- idx: slice or other index dim: dimension length Examples -------- >>> replace_none(slice(None, None, None), 10) slice(0, 10, 1) """ if not isinstance(idx, slice): return idx start, stop, step = idx.start, idx.stop, idx.step if step is None: step = 1 if step > 0: if start is None: start = 0 if stop is None: stop = dim else: if start is None: start = dim - 1 if stop is None: stop = -1 return slice(start, stop, step) 61 không được chuyển rõ ràng và to_replace là một vô hướng, danh sách hoặc bộ dữ liệu, thay thế sử dụng tham số phương thức (mặc định là 'pad') để thực hiện thay thế. Vì vậy, đây là lý do tại sao các giá trị 'a' được thay thế bằng 10 ở hàng 1 và 2 và 'b' ở hàng 4 trong trường hợp này