Tôi có một tệp văn bản chứa ma trận kích thước n * m.
Ví dụ: tệp input.txt chứa các mục sau:
0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0
0,0,2,1,0,2,0,0,0,0
0,0,2,1,1,2,2,0,0,1
0,0,1,2,2,1,1,0,0,2
1,0,1,1,1,2,1,0,2,1
Tôi cần viết tập lệnh Python trong đó tôi có thể nhập ma trận.
Kịch bản Python hiện tại của tôi là:
f = open [ 'input.txt' , 'r']
l = []
l = [ line.split[] for line in f]
print l
Danh sách đầu ra đến như thế này
[['0,0,0,0,0,0,0,0,0,0'], ['0,0,0,0,0,0,0,0,0,0'], ['0,0,0,0,0,0,0,0,0,0'],
['0,0,0,0,0,0,0,0,0,0'], ['0,0,0,0,0,0,0,0,0,0'], ['0,0,0,0,0,0,0,0,0,0'],
['0,0,2,1,0,2,0,0,0,0'], ['0,0,2,1,1,2,2,0,0,1'], ['0,0,1,2,2,1,1,0,0,2'],
['1,0,1,1,1,2,1,0,2,1']]
Tôi cần lấy các giá trị ở dạng int. Nếu tôi cố gắng gõ diễn viên, nó ném lỗi.
Một kỹ sư và nhà văn chuyên nghiệp giúp mọi người tìm ra những cách sáng tạo để giải quyết các vấn đề hàng ngày.
Bản quyền © Ali Khan [tác giả]
Bài viết này sẽ cung cấp cho bạn một hướng dẫn chi tiết về cách bạn có thể sử dụng Python để đọc các tệp văn bản lớn. Một đoạn mã đầy đủ chức năng, sẵn sàng để thực hiện được bao gồm trong hướng dẫn này để giúp bạn tăng tốc trong 10 phút sau khi đọc bài viết này.
Trước tiên chúng ta hãy làm quen với bạn với các cấu trúc dữ liệu nâng cao có sẵn trong Python mà chúng tôi sẽ sử dụng để lưu trữ và xử lý dữ liệu từ các tệp, chỉ trong trường hợp bạn mới lập trình Python.
Cấu trúc dữ liệu nâng cao trong Python
Python có hai cấu trúc dữ liệu tiên tiến và mạnh mẽ làm cho nó vượt trội hơn trong chức năng so với C/C ++. Điều này làm cho nó trở thành một ngôn ngữ lý tưởng cho các ứng dụng chuyên sâu dữ liệu số cạnh tranh với MATLAB.
Ndarrays và DataFrames
Thích nghi từ tài liệu Numpy và Pandas OpenSource
Mảng numpy
Các mảng hoặc ndarrays numpy là các mảng có thể được thu nhỏ lên đến kích thước 'n'. Chúng được sử dụng tốt nhất làm cấu trúc mảng hai chiều để đại diện cho ma trận. Bản thân mô -đun Numpy chứa các thư viện chức năng mạnh mẽ cho nhiều hoạt động số và đại số.ndarrays are arrays that can be scaled up to 'n' dimensions. They are best used as two-dimensional array structures to represent matrices. The Numpy module itself contains powerful function libraries for a variety of numerical and algebraic operations.
Khung dữ liệu gấu trúc
Các khung dữ liệu được xây dựng dựa trên các ndarrays hai chiều để thêm chức năng bổ sung. Ndarray hai chiều hiện có một cột riêng cho chỉ mục mảng và tất cả các tiêu đề cột hiện có thể giải quyết riêng lẻ. Quan trọng hơn, mỗi cột bây giờ có thể giữ một loại dữ liệu khác nhau [int, float hoặc chuỗi].
Tệp văn bản được đọc bởi mã Python
Hãy tiến tới hướng dẫn và làm quen với bạn với tệp văn bản trình diễn.
Đó là một bảng dữ liệu cột 14 hàng x 20 được lưu dưới dạng tệp TXT. Nó chứa dữ liệu ở cả ba định dạng dữ liệu: int, float và chuỗi. Tên tập tin là Busdata.
Hình 1: Tệp dữ liệu được phân tích cú pháp với mã của chúng tôi.
Tệp CDF của hệ thống IEEE 14-Bus
Tiếp theo, xem đoạn mã được đưa ra bên dưới, để đọc tệp này và chúng tôi sẽ giải thích từng dòng mã này trong phần sau.
Mã Python để đọc dữ liệu từ tệp văn bản
# Copyrights © Ali Khan [Author]
# Permitted to use with attribution
import numpy
import pandas
def Read []:
global BusData, BusDataList, BusDataArray, BusDataReshaped
X = open['C:/Users/user/OneDrive - Washington State University [email.wsu.edu]/EE - 521/BusData.txt', 'r']
BusData = X.read[]
BusDataList = BusData.split[]
BusDataArray = numpy.array[BusDataList]
BusDataReshaped = BusDataArray.reshape[14,20] #Make a matrix out of 1D Array
Read[]
BusDataFrame = pandas.DataFrame[BusDataReshaped, columns =['BusNumber', 'Bus', 'Busx', 'BusClass', 'Unused1', 'Unused2', 'BusType', 'Unused3', 'Unused4', 'BusLoadMW', 'BusLoadMVAR', 'BusGenMW', 'BusGenMVAR', 'InitialVoltAngle', 'InitialVolt', 'Qlimit+', 'Qlimit-', 'Unused5', 'Shunt', 'Unused']]
print[BusDataFrame.BusClass[6]]
Giải thích mã
Đây là một lời giải thích về những gì đang diễn ra trong mã.
Khởi tạo: Nhập Numpy và Pandas
Dòng 4: Nhập gói Numpy trong dự án. Import the numpy package in the project.
Dòng 5: Nhập gói gấu trúc trong dự án. Import the pandas package in the project.
Dòng 7: Bắt đầu một định nghĩa hàm đọc []. Nó luôn luôn là một thực hành tốt để phá vỡ mã của bạn trong các chức năng. Start a function definition Read[]. It is always a good practice to break your code in functions.
Cuộn để tiếp tục
Đọc thêm từ Owlcation
Dòng 9: Xác định các biến toàn cầu. Define global variables.
Trong Python, chỉ các biến toàn cầu sẽ xuất hiện trong Trình thám hiểm biến và chúng có thể được tham chiếu các hàm bên ngoài. Để trình diễn, tôi đã định nghĩa cả bốn là toàn cầu. Mặt khác, chỉ có biến Busdatareshaped nên được tuyên bố toàn cầu.
Hình 2: Trình thám hiểm biến Spyder hiển thị chi tiết của mọi biến.
Bản quyền © Ali Khan [tác giả]
Bài viết này sẽ cung cấp cho bạn một hướng dẫn chi tiết về cách bạn có thể sử dụng Python để đọc các tệp văn bản lớn. Một đoạn mã đầy đủ chức năng, sẵn sàng để thực hiện được bao gồm trong hướng dẫn này để giúp bạn tăng tốc trong 10 phút sau khi đọc bài viết này.
Trước tiên chúng ta hãy làm quen với bạn với các cấu trúc dữ liệu nâng cao có sẵn trong Python mà chúng tôi sẽ sử dụng để lưu trữ và xử lý dữ liệu từ các tệp, chỉ trong trường hợp bạn mới lập trình Python. The open[] function points to the directory location of file BusData.txt. Definition is assigned to random variable X.
Cấu trúc dữ liệu nâng cao trong Python read[] function reads the entire file as a string and assigns it to variable BusData. Fig 2 shows that BusData is now a string with 1792 characters.
Python có hai cấu trúc dữ liệu tiên tiến và mạnh mẽ làm cho nó vượt trội hơn trong chức năng so với C/C ++. Điều này làm cho nó trở thành một ngôn ngữ lý tưởng cho các ứng dụng chuyên sâu dữ liệu số cạnh tranh với MATLAB.
Ndarrays và DataFrames split[] function in Python, splits the string into a list at the points where their is space. The data is now converted into a list of 280 elements and assigned to variable BusDataList. Reference Fig 2.
Thích nghi từ tài liệu Numpy và Pandas OpenSource
Mảng numpy The list is converted into a numpy array by the numpy.array[] function. Fig 2 shows that BusDataArray is now an array of datatype string and has 280 elements.
Các mảng hoặc ndarrays numpy là các mảng có thể được thu nhỏ lên đến kích thước 'n'. Chúng được sử dụng tốt nhất làm cấu trúc mảng hai chiều để đại diện cho ma trận. Bản thân mô -đun Numpy chứa các thư viện chức năng mạnh mẽ cho nhiều hoạt động số và đại số.
Khung dữ liệu gấu trúc The numpy.reshape[] function from the numpy package reshapes the array into our desired dimensions of 14 x 20. Fig 2 shows that BusDataReshaped variable is now an ndarray and has dimensions 14 x 20.
Các khung dữ liệu được xây dựng dựa trên các ndarrays hai chiều để thêm chức năng bổ sung. Ndarray hai chiều hiện có một cột riêng cho chỉ mục mảng và tất cả các tiêu đề cột hiện có thể giải quyết riêng lẻ. Quan trọng hơn, mỗi cột bây giờ có thể giữ một loại dữ liệu khác nhau [int, float hoặc chuỗi].
Hình 3: BusdataFrame, hiển thị 13 cột đầu tiên của nó trong Trình thám hiểm biến
Bản quyền © Ali Khan [tác giả]
Chuyển đổi một mảng numpy thành khung dữ liệu
Dòng 20: Dòng này cuối cùng thực hiện công việc chuyển đổi một mảng các chuỗi thành một khung dữ liệu gấu trúc. This line finally does the job of converting an array of strings into a pandas dataframe.
Hàm pandas.dataframe [] lấy mảng numpy được định hình lại và tên của tất cả 20 tiêu đề cột làm đầu vào. Hình 3 cho thấy DataFrame được hình thành và Hình 2 xác minh điều này trong Trình thám hiểm biến.
Hình 4: Kết quả in
Tham chiếu các giá trị của DataFrame Pandas
Dòng 22: Các giá trị của DataFrame này có thể được truy cập rất thuận tiện bởi DataFrame.ColumnHeader. [Index] Cú pháp. Values of this dataframe can be very conveniently accessed by the dataframe.columnheader.[index] syntax.
Việc kiểm tra các loại biến sẽ cho thấy rằng tất cả ba loại dữ liệu của chuỗi, số nguyên và phao của mỗi cột đều được lưu giữ tự động bởi DataFrame.
Nội dung này là chính xác và đúng với kiến thức tốt nhất của tác giả và không có nghĩa là thay thế cho lời khuyên chính thức và cá nhân từ một chuyên gia có trình độ.
© 2022 Stormshalted