Pandas đến số excel được lưu trữ dưới dạng văn bản
Xin lỗi, tôi phải đăng ở đây vì vấn đề mà tôi đang gặp phải. Tôi nhận được hai dòng thay vì một dòng cho mỗi lần so sánh. Khi tôi xem bảng excel kết quả, một số id được lưu dưới dạng văn bản và một số thì không. Do đó, cả hai đều được coi là hai dòng trong quá trình so sánh giữa 3 khung dữ liệu bằng cách sử dụng 30 Cảm ơn Show
Tôi đang cố đọc một tệp excel có một cột (được gọi là “raster”) gồm các số có dấu nháy đơn ở đầu (để Excel có thể hiểu chúng là văn bản) vì đây là một cách phổ biến để duy trì các số 0 đứng đầu cho các số. Các số phải luôn có 6 chữ số. Ngoài ra, một số giá trị trong cột này bị thiếu Tệp tôi đang sử dụng cho ví dụ này có thể được tìm thấy tại đây Mẫu mã, một ví dụ có thể sao chép nếu có thể
Điều này trả về
Khi tôi đọc nó mà không có bất kỳ khai báo kiểu dữ liệu rõ ràng nào, cột được đọc với kiểu đối tượng float64 như có thể thấy ở trên và kết quả là các số 0 ở đầu biến mất. Tiếp theo, khi tôi sử dụng hàm fillna để thay thế các giá trị NaN và sử dụng một chuỗi, cột sẽ trở thành kiểu dữ liệu đối tượng để tính đến điều này (theo như tôi hiểu)
Điều này trả về
Giả sử rằng cột bây giờ thuộc loại đối tượng (i. e. chuỗi), tôi tiếp tục thực hiện phần đệm để biến chúng trở lại 6 chữ số
Điều này trả về
Đây là kết quả bất ngờ đối với tôi Tôi đã cố tình không thực hiện các thay đổi vĩnh viễn (do đó bản in cùng dòng với phần đệm) Điều này khiến tôi nhận ra rằng các số thực sự không được chuyển đổi thành chuỗi khi tôi thay thế NaN bằng “999999” kể từ khi tôi thử điều này
Điều này trả về một đại diện khác của cột khi được chuyển đổi rõ ràng thành chuỗi (và tôi đã kiểm tra điều này hoạt động đáng tin cậy như chuỗi sau này tôi cũng vậy. e. với đệm vv. ) ________số 8Điểm mấu chốt. Tôi biết tôi có thể tránh được rắc rối này bằng cách xác định rõ ràng các kiểu dữ liệu ngay từ đầu nhưng vì tôi quên làm điều đó và sau đó gặp phải hành vi kỳ lạ này, tôi nghĩ điều đáng nói ở đây. Bất cứ điều gì làm cho gấu trúc tốt hơn đều khiến tôi hài lòng vì cá nhân tôi rất thích làm việc với gấu trúc Khi thực hiện phân tích dữ liệu, điều quan trọng là đảm bảo các loại dữ liệu chính xác. Nếu không, bạn có thể nhận được kết quả hoặc lỗi không mong muốn. Trong trường hợp của Pandas, nó sẽ suy luận chính xác các loại dữ liệu trong nhiều trường hợp và bạn có thể tiếp tục với phân tích của mình mà không cần suy nghĩ thêm về chủ đề này Mặc dù gấu trúc hoạt động tốt như thế nào, tại một số điểm trong quá trình phân tích dữ liệu của bạn, bạn có thể sẽ cần chuyển đổi rõ ràng dữ liệu từ loại này sang loại khác. Bài viết này sẽ thảo luận về cách thay đổi dữ liệu thành kiểu số. Cụ thể hơn, bạn sẽ học cách sử dụng các phương pháp tích hợp sẵn của Pandas >>> df.int_col.dtypesdtype('int64')5 và >>> df.int_col.dtypesdtype('int64')6 để giải quyết các vấn đề phổ biến sau
Để trình diễn, chúng tôi tạo một tập dữ liệu và sẽ tải nó bằng một hàm 3Vui lòng kiểm tra repo Github để biết mã nguồn Kiểm tra kiểu dữ liệu Trước khi chúng tôi đi sâu vào các loại dữ liệu thay đổi, hãy xem nhanh cách kiểm tra các loại dữ liệu. Nếu chúng tôi muốn xem tất cả các loại dữ liệu trong DataFrame, chúng tôi có thể sử dụng thuộc tính >>> df.int_col.dtypesdtype('int64')9 5Thuộc tính này cũng có trong Series và chúng ta có thể sử dụng nó để kiểm tra kiểu dữ liệu trên một cột cụ thể. Chẳng hạn, hãy kiểm tra kiểu dữ liệu của int_col >>> df.int_col.dtypesdtype('int64') Nếu chúng tôi muốn khám phá dữ liệu, phương pháp 70 có thể hữu ích hơn vì nó cung cấp RangeIndex, tổng số cột, số lượng không null, dtypes và mức sử dụng bộ nhớ. Đây là nhiều thông tin có giá trị giúp chúng ta nắm bắt được bức tranh tổng thể hơn về dữ liệu 71. Chuyển đổi chuỗi thành int/floatCách đơn giản nhất để chuyển đổi một cột Pandas sang một loại khác là sử dụng phương thức của Sê-ri >>> df.int_col.dtypesdtype('int64')5. Chẳng hạn, để chuyển đổi chuỗi thành số nguyên, chúng ta có thể gọi nó như sau 0Chúng ta có thể thấy rằng nó đang sử dụng số nguyên 64 bit theo mặc định. Trong một số trường hợp, việc sử dụng các số nguyên ngắn hơn có thể hiệu quả hơn về bộ nhớ khi xử lý một tập dữ liệu lớn. Để làm điều đó, bạn chỉ cần gọi 72 , 73 hoặc 74Tương tự, nếu muốn chuyển kiểu dữ liệu sang float, chúng ta có thể gọi 75. Theo mặc định, nó đang sử dụng số dấu phẩy động 64 bit. Chúng ta có thể sử dụng 76 để có độ chính xác cao hơn hoặc 77 để có hiệu quả bộ nhớ tốt hơn 72. Chuyển đổi float thành intNếu chúng ta muốn chuyển đổi một cột float thành số nguyên, chúng ta có thể thử sử dụng >>> df.int_col.dtypesdtype('int64')5 mà chúng ta đã sử dụng ở trên 9Tuy nhiên, có một chút vấn đề. Bằng cách hiển thị DataFrame, chúng ta có thể thấy rằng cột được chuyển đổi thành số nguyên nhưng làm tròn tất cả các giá trị xuống. Nó có thể ổn, nhưng trong hầu hết các trường hợp, tôi sẽ tưởng tượng rằng không. Nếu chúng ta muốn chuyển đổi thành số nguyên và làm tròn theo cách mà chúng ta mong đợi, trước tiên chúng ta có thể thực hiện 79 1Bây giờ, số 00 được làm tròn thành 013. Chuyển đổi một cột của các loại hỗn hợpHãy chuyển sang một cột gồm các chuỗi và số hỗn hợp. Khi chạy 02, chúng tôi nhận được ValueError 5Lỗi cho thấy đó là sự cố với giá trị 03 vì không thể chuyển đổi thành số nguyên. Để giải quyết vấn đề này, chúng ta có thể sử dụng hàm Pandas >>> df.int_col.dtypesdtype('int64')6 với đối số 05 9Nhưng khi kiểm tra >>> df.int_col.dtypesdtype('int64')9, bạn sẽ thấy nó được chuyển đổi thành 07 50Trong một số trường hợp, bạn không muốn xuất ra giá trị float mà bạn muốn nó là số nguyên, chẳng hạn như chuyển đổi cột ID. Chúng ta có thể gọi 08. Lưu ý rằng nó có vốn 09 và khác với Numpy 70. Điều này làm là thay đổi 71 của Numpy thành 72 của Pandas và điều này cho phép nó là một số nguyên 51Ngoài ra, chúng ta có thể thay thế Numpy 73 bằng một giá trị khác (ví dụ: thay thế 71 bằng 75) và gọi 02 524. Xử lý các giá trị còn thiếuBây giờ chúng ta nên được trang bị đầy đủ để xử lý các giá trị còn thiếu. Trong Pandas, các giá trị bị thiếu được gán giá trị 71, viết tắt của “Không phải là số”. Vì lý do kỹ thuật, các giá trị 71 này luôn là của 07 53Khi chuyển đổi một cột có giá trị bị thiếu thành số nguyên, chúng tôi cũng sẽ nhận được ValueError vì không thể chuyển đổi 71 thành số nguyênĐể khắc phục lỗi, chúng ta có thể gọi 08 như chúng ta đã làm ở trên (Lưu ý đó là 09 viết hoa, giống như đã đề cập trong phần trước). Điều này làm là thay đổi 71 của Numpy thành 72 của Pandas và điều này cho phép nó là một số nguyên 54Ngoài ra, chúng ta có thể thay thế Numpy 71 bằng một giá trị khác (ví dụ: thay thế 71 bằng 75) và gọi 02 55Nếu bạn muốn tìm hiểu thêm về cách xử lý các giá trị bị thiếu, bạn có thể xem Làm việc với các giá trị còn thiếu trong PandasHướng dẫn về giá trị bị thiếu trong Pandas và cách sử dụng các phương thức tích hợp sẵn để xử lý chúnghướng tới khoa học dữ liệu. com 5. Chuyển cột tiền thành sốHãy chuyển sang cột tiền. Vấn đề là nếu chúng tôi đang sử dụng phương pháp trên, chúng tôi sẽ nhận được tất cả các giá trị 71 hoặc 72 vì chúng đều là các chuỗi có ký hiệu 11 và 12 và chúng không thể được chuyển đổi thành số. Vì vậy, điều đầu tiên chúng ta phải làm là xóa tất cả các biểu tượng không hợp lệ 56Chúng tôi xâu chuỗi 2 cuộc gọi 13, một cho 11 và một cho 12, để thay thế chúng bằng một chuỗi trốngNếu bạn đã quen với biểu thức chính quy, chúng ta cũng có thể thay thế các ký hiệu đó bằng biểu thức chính quy 57 16 nói rằng chúng tôi muốn thay thế 11 và 12 bằng một chuỗi rỗng. Đối số 19 giả định mẫu được truyền vào là một biểu thức chính quy (Lưu ý rằng nó mặc định là 50)6. Chuyển đổi boolean thành 0/1Chúng tôi có 50/ 52, nhưng bạn có thể tưởng tượng một trường hợp cần những thứ này như 75 và 54, chẳng hạn, nếu bạn đang xây dựng một mô hình học máy và đây là một trong những tính năng đầu vào của bạn, thì bạn cần nó phải là số và . Điều này thực sự rất đơn giản, bạn chỉ cần gọi 02 587. Chuyển đổi nhiều kiểu dữ liệu cột cùng một lúcCho đến nay, chúng tôi đã chuyển đổi loại dữ liệu một cột tại một thời điểm. Ví dụ 59Có một phương thức DataFrame còn có tên là >>> df.int_col.dtypesdtype('int64')5 cho phép chúng ta chuyển đổi nhiều kiểu dữ liệu cột cùng một lúc. Tiết kiệm thời gian khi bạn có nhiều cột muốn thay đổi >>> df.int_col.dtypesdtype('int64')08. Xác định kiểu dữ liệu của từng cột khi đọc tệp CSV Nếu bạn muốn đặt kiểu dữ liệu cho từng cột khi đọc tệp CSV, bạn có thể sử dụng đối số 91 khi tải dữ liệu bằng 92>>> df.int_col.dtypesdtype('int64')1 Đối số 91 lấy một từ điển với khóa đại diện cho cột và giá trị đại diện cho kiểu dữ liệu. Sự khác biệt giữa phương pháp này và phương pháp trên là phương pháp này thực hiện chuyển đổi trong quá trình đọc và có thể tiết kiệm thời gian và hiệu quả hơn về bộ nhớ9. Tạo một chức năng tùy chỉnh để chuyển đổi dữ liệu thành sốKhi dữ liệu hơi phức tạp để chuyển đổi, chúng ta có thể tạo một hàm tùy chỉnh và áp dụng nó cho từng giá trị để chuyển đổi sang loại dữ liệu phù hợp Chẳng hạn, cột money_col, đây là một hàm đơn giản mà chúng ta có thể sử dụng >>> df.int_col.dtypesdtype('int64')2 Chúng ta cũng có thể sử dụng hàm lambda >>> df.int_col.dtypesdtype('int64')310. Sự khác biệt giữa >>> df.int_col.dtypesdtype('int64')5 và >>> df.int_col.dtypesdtype('int64')6 Cách đơn giản nhất để chuyển đổi kiểu dữ liệu từ loại này sang loại khác là sử dụng phương thức >>> df.int_col.dtypesdtype('int64')5. Phương pháp này được hỗ trợ bởi cả Pandas DataFrame và Series. Nếu bạn đã có kiểu dữ liệu số ( 97, 98, 99, 500, 501, 502, 07, 504, and 505), bạn cũng có thể sử dụng >>> df.int_col.dtypesdtype('int64')5 để
Tuy nhiên, >>> df.int_col.dtypesdtype('int64')5 sẽ không hoạt động đối với cột có nhiều loại khác nhau. Chẳng hạn, mix_col có 508 và missing_col có 71. Nếu chúng tôi cố gắng sử dụng >>> df.int_col.dtypesdtype('int64')5, chúng tôi sẽ nhận được ValueError. Kể từ Pandas 0. 20. 0, lỗi này có thể được khắc phục bằng cách đặt đối số 511 nhưng dữ liệu gốc của bạn sẽ được trả về nguyên vẹnHàm Pandas >>> df.int_col.dtypesdtype('int64')6 có thể xử lý các giá trị này một cách dễ dàng hơn. Thay vì thất bại, chúng ta có thể đặt đối số 05 để ép buộc các giá trị không hợp lệ thành 71>>> df.int_col.dtypesdtype('int64')4Kết luận Chúng ta đã thấy cách chúng ta có thể chuyển đổi cột dữ liệu Pandas thành kiểu số với >>> df.int_col.dtypesdtype('int64')5 và >>> df.int_col.dtypesdtype('int64')6. >>> df.int_col.dtypesdtype('int64')5 là cách đơn giản nhất và cung cấp nhiều khả năng hơn trong cách chuyển đổi, trong khi >>> df.int_col.dtypesdtype('int64')6 có nhiều chức năng mạnh mẽ hơn để xử lý lỗi Tôi hy vọng bài viết này sẽ giúp bạn tiết kiệm thời gian trong việc học Pandas. Tôi khuyên bạn nên xem tài liệu về API 519 và >>> df.int_col.dtypesdtype('int64')6 và để biết về những thứ khác mà bạn có thể làm Cảm ơn vì đã đọc. Vui lòng kiểm tra sổ ghi chép để biết mã nguồn và tiếp tục theo dõi nếu bạn quan tâm đến khía cạnh thực tế của máy học Chức năng gấu trúc nào có thể được sử dụng để xuất dữ liệu của bạn dưới dạng tệp Excel?Bạn có thể xuất Khung dữ liệu Pandas sang tệp Excel bằng cách sử dụng to_excel .
Gấu trúc có đọc CSV nhanh hơn Excel không?Ý tưởng #2. Sử dụng CSV thay vì Tệp Excel
. xlsx) từ ERP/Hệ thống/SAP của chúng tôi. Nhập tệp csv bằng Python nhanh hơn 100 lần so với tệp Excel . Bây giờ chúng tôi có thể tải các tệp này trong 0. 63 giây.
Làm cách nào để tạo một tệp Excel từ danh sách trong Python?Làm cách nào để tạo tệp Excel bằng Python? . Tạo một đối tượng mới của lớp Workbook Truy cập Worksheet mong muốn trong workbook bằng Workbook. getWorksheets(). phương thức lấy (chỉ mục) Đặt giá trị vào ô mong muốn bằng Worksheet. getCell(). lấy(“A1”) Lưu sổ làm việc dưới dạng. xlsx bằng Workbook. phương thức lưu () Làm thế nào gấu trúc làm việc với Excel?Chúng ta chỉ cần nhập gấu trúc, sử dụng phương thức read_csv() và viết tên của tệp Excel/CSV trong ngoặc đơn . Trong đoạn mã trên, chúng tôi đã đổi tên gấu trúc thành “pd. ” Đây chỉ là quy ước đặt tên cho gấu trúc. Sau khi chạy đoạn mã trên, bạn sẽ thấy khung dữ liệu sau. Đó là tất cả những gì bạn cần để tạo một khung dữ liệu. |