gấu trúc.series.Arype¶
Series.Asype (t) ¶Bản sao của mảng, đúc vào một loại được chỉ định.
T: str hoặc dtype : str or dtype
|
ComplexWarning :: :
|
Ví dụ
>>> x = np.array([1, 2, 2.5]) >>> x array([ 1. , 2. , 2.5])
>>> x.astype(int) array([1, 2, 2])
Tôi có một cột, có giá trị float, trong một khung dữ liệu (vì vậy tôi gọi cột này là chuỗi float). Tôi muốn chuyển đổi tất cả các giá trị thành số nguyên hoặc chỉ làm tròn nó để không có số thập phân.
Hãy để chúng tôi nói DataFrame là DF và cột là A, tôi đã thử điều này:
df['a'] = round(df['a'])Tôi đã gặp lỗi khi nói phương pháp này không thể được áp dụng cho một chuỗi, chỉ áp dụng cho các giá trị riêng lẻ.
Tiếp theo tôi đã thử điều này:
for obj in df['a']: obj =int(round(obj))Sau đó, tôi đã in DF nhưng không có thay đổi. Tôi làm sai ở đâu?
Chad S.
5.63913 Huy hiệu bạc25 Huy hiệu đồng13 silver badges25 bronze badges
Đã hỏi ngày 15 tháng 10 năm 2015 lúc 21:21Oct 15, 2015 at 21:21
Dữ liệu đam mê nhiệt tìnhData Enthusiast
4913 Huy hiệu vàng12 Huy hiệu bạc22 Huy hiệu đồng3 gold badges12 silver badges22 bronze badges
round sẽ không hoạt động vì nó được gọi trên một loạt gấu trúc giống như mảng chứ không phải là giá trị vô hướng, có phương thức được tích hợp trong >>> x.astype(int) array([1, 2, 2]) 0 để hoạt động trên toàn bộ loạt loạt sau đó bạn có thể thay đổi DTYPE bằng cách sử dụng >>> x.astype(int) array([1, 2, 2]) 1:
In [43]: df = pd.DataFrame({'a':np.random.randn(5)}) df['a'] = df['a'] * 100 df Out[43]: a 0 -4.489462 1 -133.556951 2 -136.397189 3 -106.993288 4 -89.820355 In [45]: df['a'] = df['a'].round(0).astype(int) df Out[45]: a 0 -4 1 -134 2 -136 3 -107 4 -90Ngoài ra, nó không cần thiết để lặp lại trên các hàng khi có sẵn các phương pháp vector hóa
Cũng điều này:
for obj in df['a']: obj =int(round(obj))Không làm biến đổi tế bào riêng lẻ trong chuỗi, nó hoạt động trên một bản sao của giá trị, đó là lý do tại sao DF không bị đột biến.
Đã trả lời ngày 15 tháng 10 năm 2015 lúc 21:55Oct 15, 2015 at 21:55
2
Mã trong vòng lặp của bạn:
>>> x.astype(int) array([1, 2, 2]) 2
Chỉ thay đổi đối tượng mà tên >>> x.astype(int) array([1, 2, 2]) 3 đề cập đến. Nó không sửa đổi dữ liệu được lưu trữ trong loạt. Nếu bạn muốn làm điều này, bạn cần biết nơi nào trong loạt dữ liệu được lưu trữ và cập nhật nó ở đó.
E.g.
for i, num in enumerate(df['a']): df['a'].iloc[i] = int(round(obj))Đã trả lời ngày 15 tháng 10 năm 2015 lúc 21:27Oct 15, 2015 at 21:27
Chad S.Chad S.Chad S.
5.63913 Huy hiệu bạc25 Huy hiệu đồng13 silver badges25 bronze badges
2
Đã hỏi ngày 15 tháng 10 năm 2015 lúc 21:21
Dữ liệu đam mê nhiệt tình
df['a'] = df['a'].round(0).astype(int)
4913 Huy hiệu vàng12 Huy hiệu bạc22 Huy hiệu đồng
df['a'] = pd.to_numeric(df['a']).round(0).astype(int)round sẽ không hoạt động vì nó được gọi trên một loạt gấu trúc giống như mảng chứ không phải là giá trị vô hướng, có phương thức được tích hợp trong >>> x.astype(int) array([1, 2, 2]) 0 để hoạt động trên toàn bộ loạt loạt sau đó bạn có thể thay đổi DTYPE bằng cách sử dụng >>> x.astype(int) array([1, 2, 2]) 1:Oct 5, 2017 at 14:05
Ngoài ra, nó không cần thiết để lặp lại trên các hàng khi có sẵn các phương pháp vector hóaup as your question states, you can use >>> x.astype(int) array([1, 2, 2]) 4:
import numpy as np df['a'] = np.ceil(df['a'])Cũng điều này:
Không làm biến đổi tế bào riêng lẻ trong chuỗi, nó hoạt động trên một bản sao của giá trị, đó là lý do tại sao DF không bị đột biến.
Đã trả lời ngày 15 tháng 10 năm 2015 lúc 21:55Oct 16, 2015 at 9:32
Mã trong vòng lặp của bạn:fantabolous
Chỉ thay đổi đối tượng mà tên >>> x.astype(int) array([1, 2, 2]) 3 đề cập đến. Nó không sửa đổi dữ liệu được lưu trữ trong loạt. Nếu bạn muốn làm điều này, bạn cần biết nơi nào trong loạt dữ liệu được lưu trữ và cập nhật nó ở đó.6 gold badges52 silver badges48 bronze badges