Bảng đọc Python

Theo mặc định sẽ cố gắng bằng cách thử tất cả các định dạng được hỗ trợ. Nếu điều này không hiệu quả (đối với các bảng có định dạng khác thường) thì người ta cần đưa ra gợi ý bổ sung về định dạng, chẳng hạn

>>> data = astropy.io.ascii.read('t/nls1_stackinfo.dbout', data_start=2, delimiter='|')  
>>> data = astropy.io.ascii.read('t/simple.txt', quotechar="'")  
>>> data = astropy.io.ascii.read('t/simple4.txt', format='no_header', delimiter='|')  

Hàm nhận một số tham số quy định dạng bảng chi tiết. Các định dạng khác nhau có thể xác định các giá trị mặc định khác nhau, do đó, các mô tả bên dưới đôi khi đề cập đến các giá trị mặc định “điển hình”. Điều này đề cập đến trình đọc định dạng và các định dạng được phân tách bằng ký tự tương tự khác

Tham số cho read()

bảng . bảng nhập liệu

Có bốn cách để chỉ định bảng sẽ được đọc

  • Tên của một tập tin (chuỗi)
  • Chuỗi đơn chứa tất cả các dòng của bảng được phân tách bằng dòng mới
  • Đối tượng giống như tệp với phương thức read() có thể gọi được
  • Danh sách các chuỗi trong đó mỗi phần tử danh sách là một dòng bảng

Hai tùy chọn đầu tiên được phân biệt bằng sự hiện diện của một dòng mới trong chuỗi. Điều này giả định rằng tên tệp hợp lệ thường sẽ không chứa dòng mới

định dạng . định dạng tệp (default='basic') Định dạng này chỉ định định dạng cấp cao nhất của bảng ASCII, ví dụ: nếu đó là bảng được phân cách bằng ký tự cơ bản, . Giá trị của tham số này phải là một trong các. đoán. cố đoán định dạng bảng (mặc định=True)Nếu được đặt thành True thì sẽ cố đoán định dạng bảng bằng cách duyệt qua một số hoán vị định dạng bảng có thể có và cố gắng đọc bảng trong từng trường hợp. Xem phần để biết thêm chi tiết. dấu phân cách . chuỗi phân cách cột Chuỗi một ký tự được sử dụng để phân tách các trường thường mặc định là ký tự khoảng trắng. Các giá trị phổ biến khác có thể là “\s” (khoảng trắng), ”,” hoặc “. ” hoặc “\t” (tab). Giá trị của “\s” cho phép bất kỳ sự kết hợp nào của tab và ký tự khoảng trắng để phân định các cột. bình luận . biểu thức chính quy xác định một dòng nhận xét trong bảng Nếu nhận xét biểu thức chính quy khớp . Đối với định dạng basic , định dạng này mặc định là “\s*#” (bất kỳ khoảng trắng nào theo sau bởi dấu #). ký tự trích dẫn . chuỗi một ký tự để trích dẫn các trường chứa ký tự đặc biệt Chuỗi này chỉ định ký tự trích dẫn và thường sẽ là ký tự trích dẫn đơn hoặc kép. Điều này có thể hữu ích để đọc các trường văn bản có dấu cách trong bảng được phân cách bằng dấu cách. Mặc định thường là trích dẫn kép. header_start . chỉ mục dòng cho dòng tiêu đề không tính các dòng nhận xét Chỉ mục này chỉ định trong chỉ mục dòng nơi sẽ tìm thấy dòng tiêu đề. Các dòng chú thích không được tính vào số lượng này và việc đếm bắt đầu từ 0 (dòng không chú thích đầu tiên có chỉ mục = 0). Nếu được đặt thành Không, điều này cho biết rằng không có dòng tiêu đề nào và tên cột sẽ được tạo tự động. Giá trị mặc định phụ thuộc vào định dạng. data_start. chỉ mục dòng cho phần bắt đầu của dữ liệu không tính các dòng nhận xét Điều này chỉ định trong chỉ mục dòng nơi các dòng dữ liệu bắt đầu khi việc đếm bắt đầu từ 0 và không bao gồm các dòng nhận xét. Giá trị mặc định phụ thuộc vào định dạng. data_end. chỉ mục dòng cho phần cuối của dữ liệu (có thể âm để tính từ cuối) Nếu đây không phải là Không thì nó cho phép loại trừ các dòng ở cuối không phải là dòng dữ liệu hợp lệ. Giá trị âm có nghĩa là đếm từ cuối, vì vậy -1 sẽ loại trừ dòng cuối cùng, -2 hai dòng cuối cùng, v.v. bộ chuyển đổi. dict của bộ chuyển đổi kiểu dữ liệuXem phần này để biết thêm thông tin. tên. danh sách tên tương ứng với từng cột dữ liệuXác định danh sách tên đầy đủ cho từng cột dữ liệu. Điều này sẽ ghi đè tên được tìm thấy trong tiêu đề (nếu nó tồn tại). Nếu không được cung cấp thì hãy sử dụng tên từ tiêu đề hoặc tên được tạo tự động nếu không có tiêu đề. bao gồm_names. danh sách các tên cần đưa vào đầu ra Từ danh sách các tên cột được tìm thấy từ tiêu đề hoặc tham số names , chọn các cột chỉ xuất trong danh sách này. Nếu không được cung cấp thì bao gồm tất cả các tên. loại trừ_names. danh sách các tên cần loại trừ khỏi đầu raLoại trừ các tên này khỏi danh sách các cột đầu ra. Điều này được áp dụng sau khi lọc include_names . Nếu không được chỉ định thì không có cột nào bị loại trừ. fill_values. danh sách các chỉ định giá trị điền Chỉ định các mục trong bảng đầu vào sẽ bị che trong bảng đầu ra vì chúng bị lỗi hoặc bị thiếu. Xem phần để biết thêm thông tin và ví dụ. Giá trị mặc định là bất kỳ giá trị bảng trống nào được coi là thiếu. fill_include_names. danh sách các tên cột bị ảnh hưởng bởi fill_values . Nếu không được cung cấp thì fill_values có thể ảnh hưởng đến tất cả các cột. fill_exclude_names. danh sách các tên cột không bị ảnh hưởng bởi fill_values . Nếu không được cung cấp thì fill_values có thể ảnh hưởng đến tất cả các cột. đầu ra. Lớp đầu ra Cái này chuyển đổi giá trị của bảng dữ liệu thô thành đối tượng đầu ra được trả về bởi. Giá trị mặc định là , trả về một đối tượng (xem ). đầu vào. Lớp đầu vàoĐiều này thường không được chỉ định.

data_Splitter. Lớp Splitter để chia cột dữ liệu

tiêu đề_Splitter. Lớp Splitter để phân chia các cột tiêu đề

fast_reader. có sử dụng công cụ C hay không, cũng có thể là lệnh với các tùy chọn được mặc định là Sai (xem )Trình đọc . Lớp trình đọc (không được dùng nữa thay cho định dạng ) Lớp này chỉ định lớp trên cùng . Giá trị của tham số này phải là một lớp Reader. Đối với việc sử dụng cơ bản, điều này có nghĩa là một trong những cài đặt sẵn.

Giá trị xấu hoặc thiếu

Bảng dữ liệu ASCII có thể chứa các giá trị xấu hoặc thiếu. Một trường hợp phổ biến là khi một bảng chứa các mục trống không có sẵn dữ liệu, chẳng hạn

>>> weather_data = """
..   day,precip,type
..   Mon,1.5,rain
..   Tues,,
..   Wed,1.1,snow
..   """

Theo mặc định, hệ thống sẽ diễn giải các mục nhập trống là không hợp lệ/thiếu và xuất ra Bảng bị che dấu với các mục nhập bị che đi bằng cách đặt giá trị dấu hiệu tương ứng được đặt thành True:

>>> dat = ascii.read(weather_data)
>>> print dat
day  precip type
---- ------ ----
 Mon    1.5 rain
Tues     --   --
 Wed    1.1 snow

Nếu bạn muốn thay thế các giá trị bị che (bị thiếu) bằng các giá trị cụ thể, hãy đặt thuộc tính cột bị che fill_value rồi lấy thuộc tính “fill . Điều này trông giống như sau.

>>> dat['precip'].fill_value = -999
>>> dat['type'].fill_value = 'N/A'
>>> print dat.filled()
day  precip type
---- ------ ----
 Mon    1.5 rain
Tues -999.0  N/A
 Wed    1.1 snow

Bảng ASCII cũng có thể có các chỉ báo khác về dữ liệu xấu hoặc bị thiếu. Ví dụ: một bảng có thể chứa các giá trị chuỗi không phải là biểu diễn hợp lệ của một số, e. g. ". " hoặc một bảng có thể có các giá trị đặc biệt như -999 được chọn để biểu thị dữ liệu bị thiếu. Chức năng này có một hệ thống linh hoạt để đáp ứng các trường hợp này bằng cách đánh dấu các chuỗi ký tự được chỉ định trong dữ liệu đầu vào là “dữ liệu bị thiếu” trong quá trình chuyển đổi. Bất cứ khi nào dữ liệu bị thiếu được tìm thấy thì đầu ra sẽ là một bảng bị che.

Điều này được thực hiện với đối số từ khóa fill_values , có thể được đặt thành một đặc tả giá trị bị thiếu duy nhất or a list of tuples:

fill_values =  | [, , ...]
 = (, '0', , , ...)

Khi đọc bảng, phần tử thứ hai của a phải luôn là chuỗi ' . Theo mặc định, , otherwise you may get unexpected behavior . By default the được áp dụng cho tất cả các cột trừ khi chuỗi tên cột được cung cấp. Một cách khác để giới hạn các cột là sử dụng từ khóa fill_include_namesfill_exclude_names .

Trong ví dụ dưới đây, chúng tôi đọc lại bảng thời tiết sau khi điền các giá trị còn thiếu vào các trình giữ chỗ điển hình

>>> table = ['day   precip  type',
..          ' Mon     1.5  rain',
..          'Tues  -999.0   N/A',
..          ' Wed     1.1  snow']
>>> t = ascii.read(table, fill_values=[('-999.0', '0', 'precip'), ('N/A', '0', 'type')])
>>> print t
day  precip type
---- ------ ----
 Mon    1.5 rain
Tues     --   --
 Wed    1.1 snow

Ghi chú

Giá trị mặc định là fill_values=('','0') . Điều này đánh dấu các mục trống là bị thiếu đối với bất kỳ loại dữ liệu nào (int, float hoặc string). Nếu fill_values được đặt rõ ràng trong lệnh gọi thì hành vi mặc định đánh dấu mục trống là thiếu không còn áp dụng. Ví dụ, cài đặt fill_values=None sẽ tắt tính năng tự động tạo mặt nạ này mà không cần đặt bất kỳ giá trị điền nào khác. Điều này có thể hữu ích cho cột chuỗi nơi một trong các giá trị xảy ra là "" .

Yêu cầu đặt '0' có di sản của giao diện cũ được duy trì để tương thích ngược và cũng để phù hợp với . Khi đọc, phần tử thứ hai của bộ fill_value for reading with the format of fill_value used for writing tables. On reading, the second element of the thực sự có thể là một giá trị chuỗi tùy ý thay thế các lần xuất hiện của string in the input stream prior to type conversion. This ends up being the value “behind the mask”, which should never be directly accessed. Only the value '0' là trung tính khi cố gắng phát hiện loại dữ liệu cột và thực hiện chuyển đổi loại. Chẳng hạn, nếu bạn đã sử dụng 'nan' cho giá trị .

Định dạng bảng đoán

Nếu tham số guess trong được đặt thành True (mặc định) thì sẽ cố gắng đoán định dạng bảng bằng cách quay vòng qua một . Định dạng đầu tiên thành công và sẽ được sử dụng để đọc bảng. Để thành công, bảng phải được Trình đọc phân tích cú pháp thành công và đáp ứng các yêu cầu cột sau.

  • Ít nhất hai cột bảng
  • Không có tên cột nào là số float hoặc int
  • Không có tên cột nào bắt đầu hoặc kết thúc bằng dấu cách, dấu phẩy, dấu tab, dấu ngoặc đơn, dấu ngoặc kép hoặc thanh dọc (. )

Những yêu cầu này làm giảm khả năng xảy ra sai sót khi bảng được phân tích cú pháp thành công với định dạng sai. Một tình huống phổ biến là một bảng có các cột số nhưng không có hàng tiêu đề và trong trường hợp này là astropy. io. ascii sẽ tự động gán tên cột do hạn chế về tên cột trông giống số.

Thứ tự đoán được hiển thị bằng mã Python này, trong đó Trình đọc là lớp thực sự triển khai đọc các định dạng tệp khác nhau.

for Reader in (Ecsv, FixedWidthTwoLine, FastBasic, Basic,
               Rdb, FastTab, Tab, Cds, Daophot, SExtractor,
               Ipac, Latex, AASTex):
    read(Reader=Reader)

for Reader in (CommentedHeader, FastBasic, Basic, FastNoHeader, NoHeader):
    for delimiter in ("|", ",", " ", "\\s"):
        for quotechar in ('"', "'"):
            read(Reader=Reader, delimiter=delimiter, quotechar=quotechar)

Lưu ý rằng trình đọc dẫn xuất không được bao gồm trong trình tự đoán mặc định (điều này gây ra sự cố), do đó, để đọc các bảng như vậy, người ta phải chỉ định rõ ràng định dạng bằng định dạng . Cũng lưu ý rằng các định dạng tương thích với công cụ đọc nhanh cố gắng sử dụng công cụ nhanh trước công cụ đọc thông thường. . Cũng lưu ý rằng các định dạng tương thích với công cụ đọc nhanh cố gắng sử dụng công cụ nhanh trước công cụ đọc thông thường. . Cũng lưu ý rằng các định dạng tương thích với công cụ đọc nhanh cố gắng sử dụng công cụ nhanh trước công cụ đọc thông thường. . Cũng lưu ý rằng các định dạng tương thích với công cụ đọc nhanh cố gắng sử dụng công cụ nhanh trước công cụ đọc thông thường. . Cũng lưu ý rằng các định dạng tương thích với công cụ đọc nhanh cố gắng sử dụng công cụ nhanh trước công cụ đọc thông thường. . Cũng lưu ý rằng các định dạng tương thích với công cụ đọc nhanh cố gắng sử dụng công cụ nhanh trước công cụ đọc thông thường. keyword. Also notice that formats compatible with the fast reading engine attempt to use the fast engine before the ordinary reading engine.

Nếu không có dự đoán nào thành công trong việc đọc bảng (tuân theo các yêu cầu của cột), lần thử cuối cùng được thực hiện chỉ bằng cách sử dụng các tham số do người dùng cung cấp nhưng không kiểm tra các yêu cầu của cột. Bằng cách này, một bảng chỉ có một cột hoặc các tên cột trông giống như một số vẫn có thể được đọc thành công

Quá trình đoán tôn trọng bất kỳ giá trị nào của các tham số Reader, delimiter và quotechar đã được cung cấp cho hàm read(). Bất kỳ dự đoán nào xung đột sẽ bị bỏ qua. Ví dụ cuộc gọi

>>> data = ascii.read(table, Reader=ascii.NoHeader, quotechar="'")

sẽ chỉ thử bốn khả năng của dấu phân cách, bỏ qua tất cả các kết hợp Trình đọc và ký tự trích dẫn xung đột

Đoán có thể bị vô hiệu hóa theo hai cách

________số 8_______

Nhận xét và siêu dữ liệu

Bất kỳ dòng nhận xét nào được phát hiện trong quá trình đọc đều được chèn vào bảng đầu ra thông qua khóa nhận xét trong .meta . Ví dụ.

>>> data = astropy.io.ascii.read('t/nls1_stackinfo.dbout', data_start=2, delimiter='|')  
>>> data = astropy.io.ascii.read('t/simple.txt', quotechar="'")  
>>> data = astropy.io.ascii.read('t/simple4.txt', format='no_header', delimiter='|')  
0

Mặc dù sẽ không thực hiện bất kỳ xử lý hậu kỳ nào trên các dòng nhận xét, nhưng có thể thực hiện xử lý hậu kỳ tùy chỉnh bằng cách đọc lại với các nhận xét của dòng siêu dữ liệu. Đây là một ví dụ, trong đó nhận xét có dạng “# KEY = VALUE”

>>> data = astropy.io.ascii.read('t/nls1_stackinfo.dbout', data_start=2, delimiter='|')  
>>> data = astropy.io.ascii.read('t/simple.txt', quotechar="'")  
>>> data = astropy.io.ascii.read('t/simple4.txt', format='no_header', delimiter='|')  
1

bộ chuyển đổi

chuyển đổi các giá trị chuỗi thô từ bảng thành kiểu dữ liệu số bằng cách sử dụng các hàm chuyển đổi như Python intfloat functions. For example int("5. 0") sẽ thất bại trong khi float(“5. 0") sẽ thành công và trả về 5. 0 dưới dạng phao Python.

Bộ chuyển đổi mặc định là

>>> data = astropy.io.ascii.read('t/nls1_stackinfo.dbout', data_start=2, delimiter='|')  
>>> data = astropy.io.ascii.read('t/simple.txt', quotechar="'")  
>>> data = astropy.io.ascii.read('t/simple4.txt', format='no_header', delimiter='|')  
2

Những thứ này tận dụng chức năng trả về bộ 2 phần tử (converter_func, converter_type) . Loại được cung cấp phải là loại numpy hợp lệ, ví dụ numpy. int , numpy. uint , numpy. int8 , numpy. int64 , numpy. float , numpy. float64 , numpy. str .

Có thể ghi đè trình chuyển đổi mặc định cho từng cột bằng từ khóa trình chuyển đổi .

>>> data = astropy.io.ascii.read('t/nls1_stackinfo.dbout', data_start=2, delimiter='|')  
>>> data = astropy.io.ascii.read('t/simple.txt', quotechar="'")  
>>> data = astropy.io.ascii.read('t/simple4.txt', format='no_header', delimiter='|')  
3

Tùy chỉnh nâng cao

Ở đây chúng tôi cung cấp một số ví dụ minh họa cách mở rộng chức năng cơ sở để xử lý các trường hợp đặc biệt. Để vượt qua những ví dụ đơn giản này, tài liệu tham khảo tốt nhất là đọc mã cho

Xác định trình đọc tùy chỉnh theo kế thừa lớp

Cách hữu ích nhất để xác định một lớp người đọc mới là kế thừa. Đây là cách tất cả các trình đọc tích hợp được xác định, vì vậy có rất nhiều ví dụ trong mã

Trong hầu hết các trường hợp, bạn sẽ định nghĩa một lớp để xử lý tiêu đề, một lớp xử lý dữ liệu và một lớp trình đọc liên kết tất cả lại với nhau. Đây là một ví dụ đơn giản từ mã xác định trình đọc giống như trình đọc cơ bản, nhưng tiêu đề và dữ liệu bắt đầu ở các dòng khác nhau của tệp

>>> data = astropy.io.ascii.read('t/nls1_stackinfo.dbout', data_start=2, delimiter='|')  
>>> data = astropy.io.ascii.read('t/simple.txt', quotechar="'")  
>>> data = astropy.io.ascii.read('t/simple4.txt', format='no_header', delimiter='|')  
4

Trong trường hợp phức tạp hơn một chút, việc triển khai cũng có thể ghi đè lên một số phương thức trong lớp cơ sở

>>> data = astropy.io.ascii.read('t/nls1_stackinfo.dbout', data_start=2, delimiter='|')  
>>> data = astropy.io.ascii.read('t/simple.txt', quotechar="'")  
>>> data = astropy.io.ascii.read('t/simple4.txt', format='no_header', delimiter='|')  
5

Định nghĩa một trình đọc tùy chỉnh theo chức năng Thay vì định nghĩa một lớp mới, cũng có thể lấy một thể hiện của một trình đọc và sau đó sửa đổi các thuộc tính của một thể hiện trình đọc này trong một hàm

Làm cách nào để lập bảng dữ liệu Python?

Tạo bảng bằng python .
Thiết lập kết nối với cơ sở dữ liệu bằng phương thức connect()
Tạo một đối tượng con trỏ bằng cách gọi phương thức con trỏ () trên đối tượng kết nối đã tạo ở trên
Bây giờ hãy thực thi câu lệnh CREATE TABLE bằng phương thức exec() của lớp Cursor

Bảng Astropy có thể đọc những định dạng nào?

Các định dạng sau được hỗ trợ. tab , csv , no_header , rdb và cơ bản . Định dạng comment_header không được hỗ trợ trực tiếp, nhưng như một giải pháp thay thế, người ta có thể đọc bằng cách sử dụng định dạng no_header và cung cấp tên cột một cách rõ ràng bằng cách sử dụng đối số tên.

Dữ liệu dạng bảng trong Python là gì?

Tabular là gói các mô-đun Python để làm việc với dữ liệu dạng bảng . Đối tượng chính của nó là lớp tabarray, một cấu trúc dữ liệu để giữ và thao tác dữ liệu dạng bảng. Bằng cách đặt dữ liệu vào một đối tượng tabarray, bạn sẽ nhận được một biểu diễn dữ liệu linh hoạt và mạnh mẽ hơn biểu diễn Python gốc.

Thư viện Python nào biểu thị dữ liệu ở dạng bảng?

pandas là thư viện phổ biến nhất để xử lý dữ liệu dạng bảng trong Python. pandas là một khung dữ liệu, nghĩa là nó có thể xử lý các loại cột hỗn hợp như bảng được trình bày ở trên