Pandas> = 1.0: Đã đến lúc ngừng sử dụng astype[str]
!
Trước Pandas 1.0 [thực tế, 0,25] Đây là cách Defacto khai báo một chuỗi/cột dưới dạng chuỗi:
# pandas = 1.0
s = pd.Series[['a', 'b', 'c'], dtype="string"]
s.dtype
# StringDtype
0 thay thế.# pandas >= 1.0
s = pd.Series[['a', 'b', 'c'], dtype="string"]
s.dtype
# StringDtype
0 type instead.# pandas >= 1.0
s = pd.Series[['a', 'b', 'c'], dtype="string"]
s.dtype
# StringDtype
Đây là lý do, như được trích dẫn bởi các tài liệu:
Bạn có thể vô tình lưu trữ hỗn hợp các chuỗi và không dây trong một mảng DTYPE đối tượng. Nó tốt hơn để có một DTYPE chuyên dụng.
1 DTYPE phá vỡ các hoạt động dành riêng cho DTYPE như# pandas >= 1.0 s = pd.Series[['a', 'b', 'c'], dtype="string"] s.dtype # StringDtype
2. Có một cách rõ ràng để chọn chỉ văn bản trong khi loại trừ các cột không phải là văn bản nhưng vẫn là các cột đối tượng.# pandas >= 1.0 s = pd.Series[['a', 'b', 'c'], dtype="string"] s.dtype # StringDtype
Khi đọc mã, nội dung của mảng
1 DTYPE không rõ ràng hơn# pandas >= 1.0 s = pd.Series[['a', 'b', 'c'], dtype="string"] s.dtype # StringDtype
4.# pandas >= 1.0 s = pd.Series[['a', 'b', 'c'], dtype="string"] s.dtype # StringDtype
Xem thêm Phần về sự khác biệt về hành vi giữa ____10 và
# pandas >= 1.0
s = pd.Series[['a', 'b', 'c'], dtype="string"]
s.dtype
# StringDtype
1.Các loại mở rộng [được giới thiệu trong 0,24 và chính thức hóa trong 1.0] gần với gấu trúc hơn so với numpy, điều này là tốt vì các loại numpy không đủ mạnh. Ví dụ, Numpy không có bất kỳ cách nào để biểu diễn dữ liệu bị thiếu trong dữ liệu số nguyên [kể từ
# pandas >= 1.0
s = pd.Series[['a', 'b', 'c'], dtype="string"]
s.dtype
# StringDtype
7]. Nhưng gấu trúc có thể sử dụng các cột số nguyên nullable.Tại sao tôi nên ngừng sử dụng nó?
Vô tình trộn DTYPES Lý do đầu tiên, như được nêu trong các tài liệu là bạn có thể vô tình lưu trữ dữ liệu không phải là văn bản trong các cột đối tượng.
The first reason, as outlined in the docs is that you can accidentally store non-text data in object columns.
# pandas = 1.0
pd.Series[['a', 'b', 1.23], dtype="string"]
0 a
1 b
2 1.23
dtype: string
pd.Series[['a', 'b', 1.23], dtype="string"].tolist[]
# ['a', 'b', '1.23'] # it's a string and we just averted some potentially nasty bugs.
Thách thức để phân biệt các chuỗi và các đối tượng Python khác, một ví dụ rõ ràng khác là khó phân biệt giữa "chuỗi" và "đối tượng". Các đối tượng về cơ bản là loại chăn cho bất kỳ loại nào không hỗ trợ các hoạt động có thể điều trị được.
Another obvious example example is that it's
harder to distinguish between "strings" and "objects". Objects are essentially the blanket type for any type that does not support vectorizable operations.
Consider,
# Setup
df = pd.DataFrame[{'A': ['a', 'b', 'c'], 'B': [{}, [1, 2, 3], 123]}]
df
A B
0 a {}
1 b [1, 2, 3]
2 c 123
Tối đa 0,25, hầu như không có cách nào để phân biệt rằng "A" và "B" không có cùng loại dữ liệu.
# pandas = 1.0
# Convenience function I call to help illustrate my point.
df = df.convert_dtypes[]
df.dtypes
A string
B object
dtype: object
df.select_dtypes["string"]
A
0 a
1 b
2 c
Khả năng đọc này là tự giải thích ;-]
This is self-explanatory ;-]
Ok, vậy tôi có nên ngừng sử dụng nó ngay bây giờ không?
...Không. Khi viết câu trả lời này [phiên bản 1.1], không có lợi ích hiệu suất nhưng các tài liệu mong đợi các cải tiến trong tương lai sẽ cải thiện đáng kể hiệu suất và giảm sử dụng bộ nhớ cho các cột ____10 trái ngược với các đối tượng. Tuy nhiên, như đã nói, tuy nhiên, không bao giờ là quá sớm để hình thành những thói quen tốt!are no performance benefits but the docs expect future enhancements to significantly improve performance and reduce memory usage for
# pandas >= 1.0
s = pd.Series[['a', 'b', 'c'], dtype="string"]
s.dtype
# StringDtype
0 columns as opposed to objects. With that said, however, it's never too early to form good habits! Xem thảo luận
Cải thiện bài viết
Lưu bài viết
Xem thảo luận
Cải thiện bài viết
Lưu bài viết
Đọc
Approach:
- Bàn luận
- Trong bài viết này, chúng ta sẽ xem cách chuyển đổi các cột CSV thành văn bản bằng Python và chúng ta cũng sẽ xem cách chuyển đổi tất cả các cột CSV thành văn bản.
- Sau đó, tuần tự chuyển đổi từng phần tử của danh sách thành một chuỗi và tham gia chúng bằng một ký tự hoặc không gian cụ thể.
Đối với chương trình của chúng tôi, chúng tôi sẽ sử dụng tệp CSV sau:
Code:
Python3
# pandas >= 1.0
s = pd.Series[['a', 'b', 'c'], dtype="string"]
s.dtype
# StringDtype
9 # pandas = 1.0
pd.Series[['a', 'b', 1.23], dtype="string"]
0 a
1 b
2 1.23
dtype: string
pd.Series[['a', 'b', 1.23], dtype="string"].tolist[]
# ['a', 'b', '1.23'] # it's a string and we just averted some potentially nasty bugs.
5# pandas >= 1.0
pd.Series[['a', 'b', 1.23], dtype="string"]
0 a
1 b
2 1.23
dtype: string
pd.Series[['a', 'b', 1.23], dtype="string"].tolist[]
# ['a', 'b', '1.23'] # it's a string and we just averted some potentially nasty bugs.
6# pandas >= 1.0
pd.Series[['a', 'b', 1.23], dtype="string"]
0 a
1 b
2 1.23
dtype: string
pd.Series[['a', 'b', 1.23], dtype="string"].tolist[]
# ['a', 'b', '1.23'] # it's a string and we just averted some potentially nasty bugs.
7# pandas >= 1.0
pd.Series[['a', 'b', 1.23], dtype="string"]
0 a
1 b
2 1.23
dtype: string
pd.Series[['a', 'b', 1.23], dtype="string"].tolist[]
# ['a', 'b', '1.23'] # it's a string and we just averted some potentially nasty bugs.
8# Setup
df = pd.DataFrame[{'A': ['a', 'b', 'c'], 'B': [{}, [1, 2, 3], 123]}]
df
A B
0 a {}
1 b [1, 2, 3]
2 c 123
2# Setup
df = pd.DataFrame[{'A': ['a', 'b', 'c'], 'B': [{}, [1, 2, 3], 123]}]
df
A B
0 a {}
1 b [1, 2, 3]
2 c 123
3# Setup
df = pd.DataFrame[{'A': ['a', 'b', 'c'], 'B': [{}, [1, 2, 3], 123]}]
df
A B
0 a {}
1 b [1, 2, 3]
2 c 123
4# pandas = 1.0
# Convenience function I call to help illustrate my point.
df = df.convert_dtypes[]
df.dtypes
A string
B object
dtype: object
df.select_dtypes["string"]
A
0 a
1 b
2 c
6# pandas = 1.0
# Convenience function I call to help illustrate my point.
df = df.convert_dtypes[]
df.dtypes
A string
B object
dtype: object
df.select_dtypes["string"]
A
0 a
1 b
2 c
0# pandas = 1.0
pd.Series[['a', 'b', 1.23], dtype="string"]
0 a
1 b
2 1.23
dtype: string
pd.Series[['a', 'b', 1.23], dtype="string"].tolist[]
# ['a', 'b', '1.23'] # it's a string and we just averted some potentially nasty bugs.
4Apple Banana JackFruit Orange Pineapple Guava Grapes Mango 100 70 30 120 90 50 80 2001
# pandas >= 1.0
pd.Series[['a', 'b', 1.23], dtype="string"]
0 a
1 b
2 1.23
dtype: string
pd.Series[['a', 'b', 1.23], dtype="string"].tolist[]
# ['a', 'b', '1.23'] # it's a string and we just averted some potentially nasty bugs.
8 Apple Banana JackFruit Orange Pineapple Guava Grapes Mango 100 70 30 120 90 50 80 2003
# Setup
df = pd.DataFrame[{'A': ['a', 'b', 'c'], 'B': [{}, [1, 2, 3], 123]}]
df
A B
0 a {}
1 b [1, 2, 3]
2 c 123
0# pandas >= 1.0
# Convenience function I call to help illustrate my point.
df = df.convert_dtypes[]
df.dtypes
A string
B object
dtype: object
df.select_dtypes["string"]
A
0 a
1 b
2 c
0# pandas = 1.0
# Convenience function I call to help illustrate my point.
df = df.convert_dtypes[]
df.dtypes
A string
B object
dtype: object
df.select_dtypes["string"]
A
0 a
1 b
2 c
5FRUIT_NAME PRICE Apple 100 Banana 70 JackFruit 30 Orange 120 Pineapple 90 Guava 50 Grapes 80 Mango 2001
FRUIT_NAME PRICE Apple 100 Banana 70 JackFruit 30 Orange 120 Pineapple 90 Guava 50 Grapes 80 Mango 2002
# Setup
df = pd.DataFrame[{'A': ['a', 'b', 'c'], 'B': [{}, [1, 2, 3], 123]}]
df
A B
0 a {}
1 b [1, 2, 3]
2 c 123
2FRUIT_NAME PRICE Apple 100 Banana 70 JackFruit 30 Orange 120 Pineapple 90 Guava 50 Grapes 80 Mango 2004
Output:
FRUIT_NAME PRICE Apple 100 Banana 70 JackFruit 30 Orange 120 Pineapple 90 Guava 50 Grapes 80 Mango 200