Làm thế nào để bạn hợp nhất một số nguyên dài và số nguyên trong python?

Định dạng của các cột và hàng riêng lẻ sẽ tác động đến phân tích được thực hiện trên tập dữ liệu được đọc bằng Python. Ví dụ: bạn không thể thực hiện các phép tính toán học trên một chuỗi (dữ liệu được định dạng văn bản). Điều này có vẻ hiển nhiên, tuy nhiên đôi khi các giá trị số được đọc vào Python dưới dạng chuỗi. Trong tình huống này, khi bạn cố gắng thực hiện các phép tính trên dữ liệu số có định dạng chuỗi, bạn sẽ gặp lỗi

Trong bài học này, chúng tôi sẽ xem xét các cách để khám phá và hiểu rõ hơn về cấu trúc và định dạng dữ liệu của chúng tôi

Các loại dữ liệu

Cách thông tin được lưu trữ trong DataFrame hoặc đối tượng Python ảnh hưởng đến những gì chúng ta có thể làm với nó và cả kết quả tính toán. Có hai loại dữ liệu chính mà chúng ta sẽ khám phá trong bài học này. kiểu dữ liệu số và văn bản

Kiểu dữ liệu số

Các kiểu dữ liệu số bao gồm số nguyên và số float. Số dấu phẩy động (được gọi là số float) có dấu thập phân ngay cả khi giá trị dấu thập phân đó bằng 0. Ví dụ. 1. 13, 2. 0, 1234. 345. Nếu chúng ta có một cột chứa cả số nguyên và số dấu phẩy động, Pandas sẽ gán toàn bộ cột cho kiểu dữ liệu float để các dấu thập phân không bị mất

Một số nguyên sẽ không bao giờ có dấu thập phân. Vì vậy, nếu chúng ta muốn lưu trữ 1. 13 dưới dạng số nguyên, nó sẽ được lưu dưới dạng 1. Tương tự, 1234. 345 sẽ được lưu trữ dưới dạng 1234. Bạn sẽ thường thấy kiểu dữ liệu

surveys_df['sex'].dtype
4 trong Python viết tắt của số nguyên 64 bit. 64 đề cập đến bộ nhớ được phân bổ để lưu trữ dữ liệu trong mỗi ô, liên quan hiệu quả đến số lượng chữ số mà nó có thể lưu trữ trong mỗi “ô”. Phân bổ không gian trước thời hạn cho phép máy tính tối ưu hóa hiệu quả lưu trữ và xử lý

Kiểu dữ liệu văn bản

Kiểu dữ liệu văn bản được gọi là Chuỗi trong Python hoặc Đối tượng trong Pandas. Chuỗi có thể chứa số và/hoặc ký tự. Ví dụ: một chuỗi có thể là một từ, một câu hoặc nhiều câu. Một đối tượng Pandas cũng có thể là một tên cốt truyện như 'plot1'. Một chuỗi cũng có thể chứa hoặc bao gồm các số. Chẳng hạn, '1234' có thể được lưu trữ dưới dạng một chuỗi, cũng như '10'. 23’. Tuy nhiên, các chuỗi chứa số không thể được sử dụng cho các phép toán

Pandas và Python cơ sở sử dụng các tên hơi khác nhau cho các loại dữ liệu. Thêm về điều này là trong bảng dưới đây

Pandas TypeNative Python TypeDescriptionobjectstringDtype chung nhất. Sẽ được gán cho cột của bạn nếu cột có nhiều loại (số và chuỗi). int64intKý tự số. 64 đề cập đến bộ nhớ được phân bổ để giữ ký tự này. float64 float Các ký tự số có số thập phân. Nếu một cột chứa số và NaN (xem bên dưới), gấu trúc sẽ mặc định là float64, trong trường hợp giá trị bị thiếu của bạn có số thập phân. datetime64, timedelta[ns]N/A (nhưng hãy xem mô-đun datetime trong thư viện chuẩn của Python) Các giá trị dùng để chứa dữ liệu thời gian. Nhìn vào những điều này cho các thí nghiệm chuỗi thời gian

Kiểm tra định dạng dữ liệu của chúng tôi

Giờ đây, chúng ta đã được trang bị kiến ​​thức cơ bản về các loại dữ liệu số và văn bản, hãy cùng khám phá định dạng dữ liệu khảo sát của chúng ta. Chúng ta sẽ làm việc với cùng một bộ dữ liệu

surveys_df['sex'].dtype
5 mà chúng ta đã sử dụng trong các bài học trước

# Make sure pandas is loaded
import pandas as pd

# Note that pd.read_csv is used because we imported pandas as pd
surveys_df = pd.read_csv("data/surveys.csv")

Hãy nhớ rằng chúng ta có thể kiểm tra loại đối tượng như thế này

type(surveys_df)

pandas.core.frame.DataFrame

Tiếp theo, hãy xem cấu trúc dữ liệu khảo sát của chúng tôi. Trong pandas, chúng ta có thể kiểm tra loại của một cột trong DataFrame bằng cú pháp

surveys_df['sex'].dtype
6

surveys_df['sex'].dtype

dtype('O')

Loại 'O' chỉ là viết tắt của "đối tượng" mà trong thế giới của Pandas là một chuỗi (văn bản)

________số 8

dtype('int64')

Loại

surveys_df['sex'].dtype
7 cho chúng ta biết rằng Python đang lưu trữ từng giá trị trong cột này dưới dạng số nguyên 64 bit. Chúng ta có thể sử dụng lệnh
surveys_df['sex'].dtype
8 để xem kiểu dữ liệu cho từng cột trong DataFrame (tất cả cùng một lúc)

surveys_df['sex'].dtype
2

trả về

surveys_df['sex'].dtype
3

Lưu ý rằng hầu hết các cột trong dữ liệu Khảo sát của chúng tôi thuộc loại

surveys_df['sex'].dtype
7. Điều này có nghĩa là chúng là số nguyên 64 bit. Nhưng cột trọng lượng là một giá trị dấu phẩy động có nghĩa là nó chứa số thập phân. Các cột
dtype('O')
0 và
dtype('O')
1 là các đối tượng có nghĩa là chúng chứa các chuỗi

Làm việc với số nguyên và số float

Vì vậy, chúng tôi đã học được rằng máy tính lưu trữ số theo một trong hai cách. dưới dạng số nguyên hoặc dưới dạng số dấu phẩy động (hoặc số float). Số nguyên là số chúng ta thường đếm với. Số float có phần thập phân (số thập phân). Tiếp theo, hãy xem xét cách loại dữ liệu có thể tác động đến các hoạt động toán học trên dữ liệu của chúng ta. Phép cộng, phép trừ, phép chia và phép nhân hoạt động trên số float và số nguyên như chúng ta mong đợi

surveys_df['sex'].dtype
7

type(surveys_df)
0

type(surveys_df)
1

type(surveys_df)
2

Nếu chúng ta chia một số nguyên cho một số nguyên khác, chúng ta sẽ nhận được một số float. Kết quả trên Python 3 khác với Python 2, trong đó kết quả là một số nguyên (chia số nguyên)

type(surveys_df)
3

type(surveys_df)
4

type(surveys_df)
5

type(surveys_df)
6

Chúng ta cũng có thể chuyển đổi số dấu phẩy động thành số nguyên hoặc số nguyên thành số dấu phẩy động. Lưu ý rằng Python theo mặc định sẽ làm tròn xuống khi nó chuyển đổi từ dấu phẩy động sang số nguyên

type(surveys_df)
7

type(surveys_df)
8

type(surveys_df)
9

pandas.core.frame.DataFrame
0

Làm việc với dữ liệu khảo sát của chúng tôi

Quay trở lại dữ liệu của chúng tôi, chúng tôi có thể sửa đổi định dạng của các giá trị trong dữ liệu của mình, nếu chúng tôi muốn. Chẳng hạn, chúng ta có thể chuyển đổi trường

dtype('O')
2 thành giá trị dấu phẩy động

pandas.core.frame.DataFrame
1

pandas.core.frame.DataFrame
2

Thay đổi loại

Hãy thử chuyển đổi cột

dtype('O')
3 thành float bằng cách sử dụng

pandas.core.frame.DataFrame
3

Tiếp theo hãy thử chuyển đổi

dtype('O')
4 thành một số nguyên. Có gì sai ở đây?

Thiếu giá trị dữ liệu - NaN

Điều gì đã xảy ra trong hoạt động thử thách cuối cùng? .

dtype('O')
5. Nếu chúng ta nhìn vào cột
dtype('O')
4 trong dữ liệu khảo sát, chúng ta sẽ nhận thấy rằng có các giá trị NaN (Không phải là Số). Giá trị NaN là giá trị không xác định không thể được biểu diễn bằng toán học. Ví dụ, gấu trúc sẽ đọc một ô trống trong trang tính CSV hoặc Excel dưới dạng NaN. NaN có một số thuộc tính mong muốn. nếu chúng ta tính trung bình cột
dtype('O')
4 mà không thay thế các NaN của mình, Python sẽ biết bỏ qua các ô đó

pandas.core.frame.DataFrame
4

pandas.core.frame.DataFrame
5

Xử lý các giá trị dữ liệu bị thiếu luôn là một thách thức. Đôi khi rất khó để biết tại sao các giá trị bị thiếu - có phải do lỗi nhập dữ liệu không? . Nếu may mắn, chúng tôi có một số siêu dữ liệu sẽ cho chúng tôi biết thêm về cách xử lý các giá trị null

Chẳng hạn, trong một số lĩnh vực, như Viễn thám, các giá trị dữ liệu bị thiếu thường được định nghĩa là -9999. Có một loạt các giá trị -9999 trong dữ liệu của bạn thực sự có thể thay đổi các phép tính số. Thông thường trong bảng tính, các ô bị bỏ trống khi không có dữ liệu. Theo mặc định, gấu trúc sẽ thay thế các giá trị bị thiếu đó bằng NaN. Tuy nhiên, bạn nên tập thói quen đánh dấu có chủ ý các ô không có dữ liệu, không có giá trị dữ liệu. Bằng cách đó, sẽ không có câu hỏi nào trong tương lai khi bạn (hoặc người khác) khám phá dữ liệu của bạn

NaN ở đâu?

Hãy khám phá thêm một chút về các giá trị NaN trong dữ liệu của chúng tôi. Sử dụng các công cụ đã học ở bài 02, chúng ta có thể tính xem có bao nhiêu hàng chứa giá trị NaN cho trọng số. Chúng tôi cũng có thể tạo một tập hợp con mới từ dữ liệu của mình chỉ chứa các hàng có giá trị trọng số > 0 (i. e. , chọn giá trị trọng số có ý nghĩa)

pandas.core.frame.DataFrame
6

Chúng ta có thể thay thế tất cả các giá trị NaN bằng 0 bằng cách sử dụng phương pháp

dtype('O')
8 (sau khi tạo một bản sao dữ liệu để không mất công)

pandas.core.frame.DataFrame
7

Tuy nhiên NaN và 0 mang lại kết quả phân tích khác nhau. Giá trị trung bình khi các giá trị NaN được thay thế bằng 0 khác với khi các giá trị NaN bị loại bỏ hoặc bỏ qua một cách đơn giản

pandas.core.frame.DataFrame
8

pandas.core.frame.DataFrame
9

Chúng tôi có thể điền các giá trị NaN với bất kỳ giá trị nào mà chúng tôi đã chọn. Mã bên dưới điền vào tất cả các giá trị NaN với giá trị trung bình cho tất cả các giá trị trọng số

surveys_df['sex'].dtype
0

Chúng tôi cũng có thể chọn tạo một tập hợp con dữ liệu của mình, chỉ giữ các hàng không chứa giá trị NaN

Vấn đề là đưa ra quyết định có ý thức về cách quản lý dữ liệu bị thiếu. Đây là nơi chúng tôi nghĩ về cách dữ liệu của chúng tôi sẽ được sử dụng và những giá trị này sẽ tác động như thế nào đến các kết luận khoa học được đưa ra từ dữ liệu

Python cung cấp cho chúng tôi tất cả các công cụ mà chúng tôi cần để giải quyết những vấn đề này. Chúng ta chỉ cần thận trọng về cách các quyết định mà chúng ta đưa ra ảnh hưởng đến kết quả khoa học

Đếm

Đếm số lượng giá trị bị thiếu trên mỗi cột

Dấu

Phương pháp

dtype('O')
9 cung cấp cho bạn số lượng quan sát không NA trên mỗi cột. Hãy thử tìm đến phương pháp
surveys_df['record_id'].dtype
0

Viết dữ liệu ra CSV

Chúng tôi đã học về cách sử dụng thao tác dữ liệu để có được đầu ra mong muốn. Nhưng chúng tôi cũng đã thảo luận về việc giữ dữ liệu đã được thao tác tách biệt khỏi dữ liệu thô của chúng tôi. Một cái gì đó chúng tôi có thể quan tâm đến là chỉ làm việc với các cột có đầy đủ dữ liệu. Trước tiên, hãy tải lại dữ liệu để chúng tôi không trộn lẫn tất cả các thao tác trước đó của mình

surveys_df['sex'].dtype
1

Tiếp theo, hãy bỏ tất cả các hàng chứa giá trị bị thiếu. Chúng tôi sẽ sử dụng lệnh

surveys_df['record_id'].dtype
1. Theo mặc định, dropna sẽ xóa các hàng chứa dữ liệu bị thiếu cho dù chỉ một cột

surveys_df['sex'].dtype
2

Nếu bây giờ bạn nhập

surveys_df['record_id'].dtype
2, bạn sẽ thấy rằng DataFrame kết quả có 30676 hàng và 9 cột, nhỏ hơn nhiều so với 35549 hàng ban đầu

Bây giờ chúng ta có thể sử dụng lệnh

surveys_df['record_id'].dtype
3 để xuất DataFrame ở định dạng CSV. Lưu ý rằng mã bên dưới sẽ theo mặc định lưu dữ liệu vào thư mục làm việc hiện tại. Chúng tôi có thể lưu nó vào một thư mục khác bằng cách thêm tên thư mục và dấu gạch chéo trước tên tệp.
surveys_df['record_id'].dtype
4. Chúng tôi sử dụng 'index=False' để gấu trúc không bao gồm số chỉ mục cho mỗi dòng

surveys_df['sex'].dtype
3

Chúng tôi sẽ sử dụng tệp dữ liệu này sau trong hội thảo. Kiểm tra thư mục làm việc của bạn để đảm bảo CSV được viết đúng cách và bạn có thể mở nó. Nếu bạn muốn, hãy thử đưa nó trở lại Python để đảm bảo rằng nó nhập đúng cách