Kết hợp các khung với chức năng hợp nhất
Hàm merge (hợp nhất) là hàm Python đầu tiên bạn có thể sử dụng để kết hợp hai khung dữ liệu. Hàm này nhận các đối số mặc định sau:
pd.merge(DataFrame1, DataFrame2, how= type of merge)
Trong đó:
- pd là bí danh của thư viện Pandas.
- merge là chức năng hợp nhất khung dữ liệu
- DataFrame1 và DataFrame2 là hai DataFrames để hợp nhất.
- how: xác định kiểu hợp nhất.
Có sẵn một số đối số tùy chọn bổ sung mà bạn có thể sử dụng khi có cấu trúc dữ liệu phức tạp.
Bạn có thể sử dụng các giá trị khác nhau cho tham số how để xác định kiểu hợp nhất sẽ thực hiện. Bạn sẽ quen với những kiểu hợp nhất này nếu đã từng sử dụng SQL để hợp nhất các bảng cơ sở dữ liệu.
2.1 Hợp nhất trái (Left merge)
Kiểu hợp nhất bên trái giữ nguyên các giá trị của khung dữ liệu đầu tiên và kéo các giá trị phù hợp từ khung dữ liệu thứ hai.
2.2 Hợp nhất phải (right merge)
Hợp nhất phải giữ nguyên các giá trị của khung dữ liệu thứ hai và kéo các giá trị phù hợp từ khung dữ liệu đầu tiên.
2.3 Hợp nhất bên trong (inner merge)
Loại hợp nhất bên trong giữ lại các giá trị phù hợp từ cả hai khung dữ liệu và loại bỏ các giá trị không phù hợp.
2.4 Hợp nhất bên ngoài (outer merge)
Loại hợp nhất bên ngoài giữ lại tất cả các giá trị phù hợp và không khớp và hợp nhất các DataFrames với nhau.
Sửa đổi mảng
Giả sử ta có Array như sau:
arr = np.array ([1, 2, 3, 4, 5, 6, 7, 8])
Ta có thể thêm các phần tử vào mảng của mình bất kỳ lúc nào với
np.append ()
. Đảm bảo chỉ định mảng và các phần tử bạn muốn đưa vào.
Input:
np.append (arr, [1,2])
Ouput:
([1, 2, 3, 4, 5, 6, 7, 8, 1, 2])
Tham khảo:
All rights reserved
Array Join có nghĩa là đưa nội dung của hai hoặc nhiều mảng thành một mảng hay chúng ta có thể gọi là nối mảng.
Trong SQL sử dụng join table bởi key. Nhưng trong Numpy sử dụng join arrays bởi axis.
Chúng ta có thể truyền một chuỗi các mảng mà chúng ta muốn nối vào hàm concatenate(), nếu axis không được truyền vào nó sẽ lấy mặc định là 0.
Nối mảng trong numpy sử dụng các hàm : concatenate(), stack(), hstack(), vstack(), dstack().
import numpy as np
array_1 = np.array([1,2,3])array_2 = np.array([4,5,6])
arr = np.concatenate((array_1,array_2))print(arr)
[1 2 3 4 5 6]
Trong Numpy bạn có thể sử dụng axis=1 để nối mảng theo dòng rows.
import numpy as np
array_1 = np.array([[1,2],[3,4]])array_2 = np.array([[5,6],[7,8]])
arr = np.concatenate((array_1,array_2), axis=1)print(arr)
[[1 2 5 6][3 4 7 8]]
Hàm stack() trong numpy dùng để xếp chồng hay nối mảng, nó giống như hàm concatenate(). Tuy nhiên hàm stack() nó có điểm khác là xếp chồng theo một trục (axis) mới.
import numpy as np
array_1 = np.array([1,2,3])array_2 = np.array([4,5,6])
arr = np.stack((array_1,array_2), axis=1)print(arr)
[[1 4][2 5][3 6]]
Hàm hstack() nối mảng trong numpy. Hàm hstack() dùng để xếp chồng, nối mảng theo dòng rows.
Ví dụ:
import numpy as np
array_1 = np.array([1,2,3])array_2 = np.array([4,5,6])
arr = np.hstack((array_1,array_2))print(arr)
[1 2 3 4 5 6]
Hàm vstack() nối mảng trong numpy.Hàm vstack() dùng để xếp chồng, nối mảng theo cột columns.
import numpy as np
array_1 = np.array([1,2,3])array_2 = np.array([4,5,6])
arr = np.vstack((array_1,array_2))print(arr)
[[1 2 3][4 5 6]]
Hàm dstack() để nối mảng trong Numpy. Hàm dstack() nối mảng, xếp chồng mảng theo chiều sâu (depth).
import numpy as np
array_1 = np.array([1,2,3])array_2 = np.array([4,5,6])
arr = np.dstack((array_1,array_2))print(arr)
[[[1 4][2 5][3 6]]]
Tạo mảng
Để tạo một mảng NumPy, bạn có thể sử dụng hàm np.array () . Để tạo mảng bạn cần chuyền một danh sách cho nó.
#Load Library import numpy as np #create an array a = np.array([1, 2, 3])
Bên cạnh việc tạo mảng từ một chuỗi các phần tử, bạn có thể dễ dàng tạo mảng bằng cách sử dụng các hàm khác. Các chức năng được thảo luận như sau:
numpy.zeros
: Bạn có thể dễ dàng tạo một mảng chứa các số 0 bằng cách sử dụng numpy.zeros vì nó trả về một mảng mới có kích thước được chỉ định, chứa đầy các số không.
np.zeros (2)
output sẽ là:
[0., 0.]
Chú ý: Đừng nhầm lẫn với np.zeros và numpy.zeros . Vì tôi đã nhập thư viện NumPy dưới dạng: nhập numpy dưới dạng np , đó là lý do tôi sử dụng np.zeros .
numpy.ones
: trả về một mảng mới có kích thước và kiểu được chỉ định, chứa đầy các mảng.
np.ones (5)
ouput:
[ 1. 1. 1. 1. 1.]
numpy.empty
: Hàm trống tạo một mảng có nội dung ban đầu là ngẫu nhiên và phụ thuộc vào trạng thái của bộ nhớ.
# Create an empty array with 2 elements np.empty(2)
Output:
[ 5.26288483e+064 -1.80841072e-141]
Chú ý: Các phần tử trong một mảng hiển thị các giá trị ngẫu nhiên vì chúng không được khởi tạo.
Kiểu dữ liệu mặc định là floating point (float64), bạn có thể chỉ định rõ ràng kiểu dữ liệu nào bạn muốn bằng cách sử dụng dtype như tôi giới thiệu ở bài trước
a = np.empty([3,2], dtype = int)
output hiển thị mảng 3 x 2:
[[ 873918640 32764] [ 873923184 32764] [1851858988 1752375396]]
numpy.arange
: Bạn có thể tạo một mảng với một loạt các phần tử.
Ex: input
arange (4)
output:
[0, 1, 2, 3]
Hoặc thậm chí là một mảng có chứa một loạt các khoảng cách đều nhau. Để làm điều này, bạn sẽ chỉ định số đầu tiên , số cuối cùng và kích thước step .
Input:
np.arange(2,9,2)
Output:
[2, 4, 6, 8]
numpy.linspace
: Hàm này tương tự như hàm arange (). Trong hàm này, thay vì kích thước step, số lượng các giá trị cách đều giữa khoảng được chỉ định.
Input:
linspace (10,20,5)
Output:
[10. 12.5 15. 17.5 20. ]
Xếp chồng mảng
Joining Array
Joining có nghĩa là đưa nội dung của hai hoặc nhiều mảng vào một mảng duy nhất. Chúng ta truyền một chuỗi các mảng mà chúng ta muốn nối vào
concatenate()
, cùng với trục. Nếu trục không được thông qua một cách rõ ràng, nó được coi là 0.
arr1 = np.array([1, 2, 3]) arr2 = np.array([4, 5, 6]) arr = np.concatenate((arr1, arr2)) print(arr)
Output:
[1 2 3 4 5 6]
với mảng 2D:
arr1 = np.array ([[1, 2], [3, 4]]) arr2 = np.array ([[5, 6], [7, 8]]) arr = np.concatenate ((arr1, arr2 ), axis = 1) print (arr)
Output:
[[1 2 5 6] [3 4 7 8]]
Nối các mảng bằng các hàm ngăn xếp(Joining Arrays Using Stack Functions)
Xếp chồng cũng giống như nối, khác biệt duy nhất là xếp chồng được thực hiện dọc theo một trục mới. Chúng ta có thể nối hai mảng 1-D dọc theo trục thứ hai, điều này sẽ dẫn đến việc đặt chúng chồng lên nhau, tức là. xếp chồng.
arr1 = np.array ([1, 2, 3]) arr2 = np.array ([4, 5, 6]) arr = np.stack ((arr1, arr2), axis = 1) print (arr)
Output:
[[1 4] [2 5] [3 6]]
Xếp chồng lên hàng
NumPy cung cấp một chức năng trợ giúp: hstack()xếp chồng dọc theo hàng.
arr1 = np.array ([1, 2, 3]) arr2 = np.array ([4, 5, 6]) arr = np.hstack ((arr1, arr2)) #h đề cập đến hàng ngang tức là hàng in (arr )
Output:
[1 2 3 4 5 6]
Xếp chồng dọc theo cột
NumPy cung cấp một chức năng trợ giúp:
vstack()
xếp chồng dọc theo các cột.
arr1 = np.array ([1, 2, 3]) arr2 = np.array ([4, 5, 6]) arr = np.vstack ((arr1, arr2)) print (arr)
Output:
[[1 2 3] [4 5 6]]
Tách mảng
Chia tách là hoạt động ngược lại của Gia nhập.
Tham gia hợp nhất nhiều mảng thành một và Chia tách sẽ chia một mảng thành nhiều mảng.
Chúng tôi sử dụng
array_split()
để tách mảng, chúng tôi chuyển cho nó mảng mà chúng tôi muốn tách và số lần tách.
arr = np.array ([1, 2, 3, 4, 5, 6]) newarr = np.array_split (arr, 3) print (newarr)
Output:
[array([1, 2]), array([3, 4]), array([5, 6])]
Chia thành các mảng
Giá trị trả về của
array_split()
phương thức là một mảng chứa mỗi phần tách dưới dạng một mảng.
Nếu bạn chia một mảng thành 3 mảng, bạn có thể truy cập chúng từ kết quả giống như bất kỳ phần tử mảng nào:
arr = np.array ([1, 2, 3, 4, 5, 6]) newarr = np.array_split (arr, 3) print (newarr [0]) print (newarr [1]) print (newarr [2] )
Output:
[1 2] [3 4] [5 6]
Tách mảng 2-D
Sử dụng cú pháp tương tự khi tách mảng 2-D.
Sử dụng
array_split()
phương thức, truyền vào mảng bạn muốn tách và số lần tách bạn muốn thực hiện.
Ví dụ: Chia mảng 2-D thành ba mảng 2-D:
arr = np.array ([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]]) newarr = np.array_split ( arr, 3) in (newarr)
OUtput
[array([[1, 2], [3, 4]]), array([[5, 6], [7, 8]]), array([[ 9, 10], [11, 12]])]
Bạn có thể chia một mảng thành nhiều mảng nhỏ hơn bằng cách sử dụng function
hsplit
. Bạn có thể chỉ định số lượng các mảng có hình dạng bằng nhau để trả về hoặc các cột mà sau đó phép chia sẽ xảy ra.
Ví dụ ta có mảng này:
arr = np.array ([[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]])
Nếu bạn muốn chia mảng này thành ba mảng có hình dạng bằng nhau, ta sẽ chạy:
Input:
np.hsplit (arr, 3)
Output:
[array([[ 1, 2, 3, 4], [13, 14, 15, 16]]), array([[ 5, 6, 7, 8], [17, 18, 19, 20]]), array([[ 9, 10, 11, 12], [21, 22, 23, 24]])]
Array Operations
Các thao tác cơ bản đơn giản với NumPy. Nếu bạn muốn tìm tổng của các phần tử trong một mảng, bạn sẽ sử dụng sum (). Điều này hoạt động đối với mảng 1D, mảng 2D và mảng ở kích thước cao hơn.
a = np.array ([1, 2, 3, 4]) # Add all of the elements in the array print (a.sum())
Output:
10
Với Array 3×4:
a = np.array ([[1,2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) print (a.sum ())
Output:
78
Tương tự, các phép toán số học khác như cộng (), trừ (), nhân () và chia () cũng dễ sử dụng:
a = np.array ([1, 2, 3]) print (a) b = np.array ([10,10,10]) print (b) print (np.add (a, b)) print (np .subtract (a, b)) print (np.multiply (a, b)) print (np.divide (a, b))
Lưu ý – Các mảng đầu vào để thực hiện các phép toán số học như cộng (), trừ (), nhân () và chia () phải có cùng hình dạng hoặc phải tuân theo quy tắc phát mảng.
Phát sóng mảng(Array Broadcasting)
Thuật ngữ phát sóng hay đề cập đến khả năng của NumPy để xử lý các mảng có hình dạng khác nhau trong các phép toán số học. Các phép toán số học trên mảng thường được thực hiện trên các phần tử tương ứng. Nếu hai mảng có hình dạng hoàn toàn giống nhau thì các thao tác này được thực hiện trơn tru.
a = np.array ([1,2,3,4]) b = np.array ([10,20,30,40]) c = a * b print (c)
Output:
[ 10 40 90 160]
Nếu kích thước của hai mảng không giống nhau (tức là không giống nhau), thì không thể thực hiện các thao tác giữa phần tử với phần tử. Tuy nhiên, các thao tác trên các mảng có hình dạng không giống nhau vẫn có thể thực hiện được trong NumPy, vì khả năng phát sóng. Mảng nhỏ hơn được
phát
tới kích thước của mảng lớn hơn để chúng có hình dạng tương thích.
Ex:
a = np.array ([[0,0,0.0,0.0], [10.0,10.0,10.0], [20.0,20.0,20.0], [30.0,30.0,30.0]]) b = np.array ([1.0,2.0 , 3.0]) print (a) print (b) print (a + b)
Hình sau minh họa cách mảng b được phát sóng để tương thích với a .
Output:
[[ 0. 0. 0.] [10. 10. 10.] [20. 20. 20.] [30. 30. 30.]] [1. 2. 3.] [[ 1. 2. 3.] [11. 12. 13.] [21. 22. 23.] [31. 32. 33.]]
Lặp lại các mảng
Lặp lại có nghĩa là đi qua từng phần tử một.
Khi chúng ta xử lý mảng nhiều chiều trong numpy, chúng ta có thể thực hiện việc này bằng cách sử dụng vòng for lặp cơ bản của python.
Nếu chúng ta lặp lại trên một mảng 1-D, nó sẽ đi qua từng phần tử một.
arr = np.array ([1, 2, 3]) cho x trong arr: print (x)
Output:
1 2 3
Lặp lại Mảng 2-D
Trong mảng 2-D, nó sẽ đi qua tất cả các hàng.
arr = np.array ([[1, 2, 3], [4, 5, 6]]) cho x trong arr: print (x)
Output:
[1 2 3] [4 5 6]
Định hình lại mảng (Reshaping Array)
Sử dụng
np.reshape ()
sẽ cung cấp một hình dạng mới cho một mảng mà không làm thay đổi dữ liệu. Chỉ cần nhớ rằng khi bạn sử dụng hàm reshape, mảng bạn muốn tạo ra cần có cùng số phần tử với mảng ban đầu. Nếu bạn bắt đầu với một mảng có 12 phần tử, bạn sẽ cần đảm bảo rằng mảng mới của bạn cũng có tổng số 12 phần tử.
Trước khi chuyển sang phương pháp định hình lại, điều quan trọng là phải biết hình dạng và kích thước mảng của bạn. Để có được điều này, NumPy cung cấp cho chúng ta một số chức năng:
ndarray.ndim
sẽ cho bạn biết số lượng trục hoặc kích thước của mảng.
ndarray.size
sẽ cho bạn biết tổng số phần tử của mảng. Đây là sản phẩm của các phần tử của hình dạng của mảng.
ndarray.shape
sẽ hiển thị một bộ số nguyên cho biết số lượng phần tử được lưu trữ dọc theo mỗi chiều của mảng. Ví dụ: nếu bạn có một mảng 2D với 2 hàng và 3 cột, hình dạng của mảng của bạn là (2,3).
Giả sử, chúng ta bắt đầu với mảng này:
arr = np.array ([[1,2,3], [4,5,6]]) print (arr)
sau đó ta tìm kích thước mảng:
print (arr.ndim)
. output:
print (arr.size)
. Output:
hình dạng của mảng:
print (arr.shape)
Output:
(2, 3)
Sắp xếp mảng
Việc sắp xếp một phần tử rất đơn giản với np.sort () . Bạn có thể chỉ định trục, loại và thứ tự khi bạn gọi hàm.
Ta bắt đầu với mảng này:
arr = np.array ([2, 1, 5, 3, 7, 4, 6, 8])
Bạn có thể nhanh chóng sắp xếp các số theo thứ tự tăng dần với:
print (np.sort (arr))
Output:
[1, 2, 3, 4, 5, 6, 7, 8]
Cách sử dụng hàm Concat
Hàm concat là một tùy chọn linh hoạt so với một số hàm hợp nhất khác của Python. Với chức năng concat, bạn có thể kết hợp DataFrames theo chiều dọc và chiều ngang.
Tuy nhiên, hạn chế của việc sử dụng hàm concat là nó loại bỏ mọi giá trị không khớp theo mặc định. Giống như một số hàm liên quan khác, hàm này có một số đối số, trong đó chỉ có một số đối số là cần thiết để nối thành công.
concat(dataframes, axis=0, join='outer'/’inner’)
Trong đó:
- concat là hàm hợp nhất khung dữ liệu
- dataframes là một chuỗi các DataFrames để nối với nhau.
- axis thể hiện hướng nối, 0 là ngang, 1 là dọc.
- join chỉ định hợp nhất bên ngoài hoặc bên trong.
Sử dụng hai khung dữ liệu trên, bạn có thể thử hàm concat như sau:
# define the dataframes in a list format df_merged_concat = pd.concat([df1, df2]) # print the results of the Concat function print(df_merged_concat)
Sự vắng mặt của các đối số axis và join trong đoạn code trên kết hợp hai tập dữ liệu. Kết quả đầu ra có tất cả các mục nhập, bất kể trạng thái khớp.
Tương tự, bạn có thể sử dụng các đối số bổ sung để điều khiển hướng và đầu ra của hàm concat.
Để kiểm soát đầu ra với tất cả các mục nhập phù hợp:
# Concatenating all matching values between the two dataframes based on their columns df_merged_concat = pd.concat([df1, df2], axis=1, join = 'inner') print(df_merged_concat)
Kết quả chỉ chứa tất cả các giá trị phù hợp giữa hai DataFrames
>>> Đọc ngay: Tự học lập trình Python căn bản tại FUNiX vô cùng đơn giản
Lập chỉ mục mảng / Cắt lát(Array Indexing / Slicing)
Bạn có thể lập chỉ mục và cắt các mảng NumPy theo cách giống như cách bạn có thể cắt các danh sách Python.
data = np.array ([1,2,3]) print (data [0]) print (data [1]) print (data [0: 2]) print (data [1:]) print (data [- 2:])
Output:
1 2 [1 2] [2 3]
Chúng ta hãy thử và làm tương tự với mảng đa chiều :
a = np.array ([[1,2,3], [3,4,5], [4,5,6]]) print (a)
// Slice items starting from index
print a[:]
Output:
[[3 4 5] [4 5 6]]
Lưu ý: Đừng nhầm lẫn ở đây, chúng ta đã cắt nó từ chỉ mục 1 trở đi, trong ngắn hạn chỉ mục 0 sẽ bị xóa khỏi đầu.
Nếu bạn muốn chọn các giá trị từ mảng của mình đáp ứng các điều kiện nhất định, nó rất đơn giản với NumPy.
Ví dụ: Ta có mảng này:
a = np.array ([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
Bạn có thể dễ dàng in tất cả các giá trị trong mảng nhỏ hơn 5.
print (a [a <5])
Ouput:
[1 2 3 4]
bạn cũng có thể chọn các số bằng hoặc lớn hơn 5 và sử dụng điều kiện đó để lập chỉ mục một mảng.
five_up = (a> = 5) print (a [five_up])
Ouput:
[5 6 7 8 9 10 11 12]
Hoặc bạn có thể chọn các phần tử thỏa mãn hai điều kiện bằng cách sử dụng dấu & và | toán tử:
Input: “` c = a [(a> 2) & (a <11)] print (c)
Output: `[3 4 5 6 7 8 9 10]` Bạn cũng có thể sử dụng các toán tử logic & và | để trả về các giá trị boolean chỉ định các giá trị trong một mảng có đáp ứng một điều kiện nhất định hay không. Điều này có thể hữu ích với các mảng có chứa tên hoặc các giá trị phân loại khác. Input:
five_up = (a > 5) | (a == 5) print(five_up)
Output: ```python [[False False False False] [ True True True True] [ True True True True]]
Bạn cũng có thể sử dụng
np.where ()
để chọn các phần tử hoặc chỉ số từ một mảng.
Ta có mảng
a = np.array ([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
Bạn có thể sử dụng np.where () để in các chỉ số của các phần tử, ví dụ: nhỏ hơn 5:
Input:
b = np.where (a <5) print (b)
Output:
(Array ([0, 0, 0, 0]), Array ([0, 1, 2, 3]))
Các câu hỏi phổ biến về numpy.concatenate
- Numpy.concatenate() là gì? Numpy.concatenate() là một hàm trong thư viện Numpy của Python, được sử dụng để ghép nối một số mảng Numpy theo một trục cụ thể.
- Cú pháp của hàm Numpy.concatenate() như thế nào? Cú pháp của hàm Numpy.concatenate() như sau: numpy.concatenate((a1, a2, …), axis=0, out=None)
Trong đó:
- a1, a2, … là các mảng Numpy cần ghép nối.
- axis là trục cần ghép nối. Giá trị mặc định của axis là 0, tức là các mảng sẽ được ghép nối theo chiều dọc.
- out là một mảng Numpy kết quả.
- Numpy.concatenate() hỗ trợ những kiểu dữ liệu nào? Numpy.concatenate() hỗ trợ các kiểu dữ liệu số, mảng và ma trận, bao gồm các kiểu dữ liệu nguyên thủy như int và float, các mảng Numpy, các ma trận Numpy, các ma trận thưa và các mảng thưa.
- Làm thế nào để ghép nối nhiều mảng Numpy với Numpy.concatenate()? Để ghép nối nhiều mảng Numpy với Numpy.concatenate(), ta cần truyền các mảng đó vào trong hàm theo cú pháp sau: numpy.concatenate((a1, a2, …, an), axis=0)
Trong đó:
- a1, a2, …, an là các mảng Numpy cần ghép nối.
- axis là trục cần ghép nối. Giá trị mặc định của axis là 0, tức là các mảng sẽ được ghép nối theo chiều dọc.
- Làm thế nào để ghép nối các ma trận với Numpy.concatenate()? Để ghép nối các ma trận với Numpy.concatenate(), ta cần truyền các ma trận đó vào trong hàm theo cú pháp sau: numpy.concatenate((m1, m2, …, mn), axis=1)
Trong đó:
- m1, m2, …, mn là các ma trận Numpy cần ghép nối.
- axis là trục cần ghép nối. Trong trường hợp này, axis phải có giá trị bằng 1, tức là các ma trận sẽ được ghép nối theo chiều ngang.
- Có bao nhiêu trục trong một mảng Numpy? Một mảng Numpy có thể có nhiều trục, tùy thuộc vào số chiều của mảng đó. Ví dụ, một mảng một chiều được gọi là một mảng có một trục, một ma trận được gọi là mảng 2 trục.
- Numpy.concatenate() có thể sử dụng để ghép nối các mảng Numpy có kích thước khác nhau không? Có, Numpy.concatenate() có thể sử dụng để ghép nối các mảng Numpy có kích thước khác nhau, nhưng chỉ khi số chiều của các mảng đó là giống nhau.
- Các tham số trong hàm Numpy.concatenate() có ý nghĩa gì?
- a1, a2, …: các mảng Numpy cần ghép nối.
- axis: trục cần ghép nối. Giá trị mặc định của axis là 0, tức là các mảng sẽ được ghép nối theo chiều dọc.
- out: một mảng Numpy kết quả. Nếu không được cung cấp, hàm sẽ tạo ra một mảng mới để lưu trữ kết quả ghép nối.
- Numpy.concatenate() và Numpy.stack() khác nhau như thế nào?
- Numpy.concatenate() được sử dụng để ghép nối các mảng Numpy theo một trục cụ thể, trong khi Numpy.stack() được sử dụng để tạo ra một mảng mới bằng cách xếp các mảng Numpy lên nhau theo một trục mới.
- Numpy.concatenate() yêu cầu các mảng Numpy cùng kích thước trên trục cần ghép nối, trong khi Numpy.stack() có thể xếp các mảng Numpy có kích thước khác nhau lên nhau.
- Numpy.stack() có thể tạo ra mảng mới với số chiều lớn hơn so với các mảng gốc, trong khi Numpy.concatenate() không thay đổi số chiều của các mảng gốc.
- Numpy.concatenate() có thể được sử dụng để ghép nối mảng một chiều và mảng hai chiều không? Có, Numpy.concatenate() có thể được sử dụng để ghép nối mảng một chiều và mảng hai chiều, nhưng chỉ khi trục được sử dụng để ghép nối là trục thứ hai của mảng hai chiều.
Xin chào mọi người, em đang muốn kết hợp 2 ma trận lại với nhau bằng hàm concatenate. Em ví dụ với ma trận (3×2) như sau:a = np.array([[1], [2], [3]])b = np.array([[4], [5], [6]])Xuất ra kết quả:[[1 4][2 5][3 6]]Giả sử X là ma trận có kích thước là: (mx2)Code của em như sau:
def mapFeature(X1, X2): degree = 6 out = np.ones((X1.shape[0], 1)) for i in range(degree): for j in range(i): out = np.concatenate((out, np.multiply(np.power(X1, i - j), np.power(X2, j))), axis = 1) return out print(mapFeature(X[:, 0], X[:, 1]))
Nó báo bị lỗi thế này:
Em thử thay đổi hàm
out = np.ones((X1.shape[0]))
Thì nó lại báo lỗi là: axis 1 is out of bounds for array of dimension 1Mục tiêu của hàm là viết hàm map feature thỏa mãn, tạo ra X có 28 feature (bậc 6):
Mọi người xem giúp em và chỉ em sao ma trận trong python lại có dạng (n, ) được nhỉ ? Xin cảm ơn mọi người nhiều ạ.
Nếu bạn sử dụng Python, dù để thực hiện các tác vụ đơn giản nhất, bạn có thể đã biết về tầm quan trọng của các thư viện bên thứ ba của nó. Thư viện Pandas, với sự hỗ trợ tuyệt vời cho các khung dữ liệu (DataFrames), là một trong những thư viện như vậy.
Bạn có thể nhập nhiều loại tệp vào khung dữ liệu Python và tạo nhiều phiên bản khác nhau để lưu trữ các tập dữ liệu khác nhau. Sau khi nhập dữ liệu của mình bằng khung dữ liệu, bạn có thể hợp nhất chúng để thực hiện phân tích chi tiết.
Xóa trong mảng
Ta có thể xóa một phần tử bằng
np.delete ()
. Nếu bạn muốn xóa phần tử ở vị trí 1 trong mảng của mình, bạn có thể chạy:
Input:
np.delete (arr, 1)
Output:
([1, 3, 4, 5, 6, 7, 8])
Chú ý: Chỉ số của một mảng bắt đầu bằng 0, vì vậy vị trí phần tử 1 là thực tế là thứ 2.
Hợp nhất DataFrames với Python
Nhờ tính linh hoạt và chức năng của chúng, khung dữ liệu là một phần không thể thiếu của Python. Với công dụng nhiều mặt của chúng, bạn có thể sử dụng chúng một cách rộng rãi để thực hiện nhiều tác vụ một cách dễ dàng nhất.
>>> Nếu bạn đang có nhu cầu học lập trình trực tuyến, tìm hiểu ngay tại đây:
>>> Xem thêm chuỗi bài viết liên quan:
Lập trình game bằng Python đơn giản cho người mới bắt đầu
Lập trình game bằng Python là gì? 5 lợi thế Python trong lập trình game
Vai trò của Python trong phân tích dữ liệu
8 ý tưởng dự án Python phù hợp cho người mới bắt đầu
Vân Nguyễn
Dịch từ: https://www.makeuseof.com/python-dataframes-merge-join/
Splitting, Concatenating, and Joining Strings in Python (Translated)
Bài đăng này đã không được cập nhật trong 5 năm
Có rất nhiều vấn đề trong cuộc sống mưu sinh và lập trình viên cũng không ngoại lệ, chúng ta cần phải đối mặt với string. String có thể đến rất nhiều dạng. Chúng có thể là text không có cấu trúc (unstructured text), username, mô tả sản phẩm, tên cột CSDL và những thứ khác mà chúng ta có thể mô tả bằng ngôn ngữ.
Với sự hiện diện gần như ở khắp mọi nơi của string, việc làm chủ các thao tác với string là tối quan trọng. May thay, Python đã làm cho việc thao tác với string trở nên đơn giản, đặc biệt là khi so sánh với các ngôn ngữ khác và thậm chí là với các phiên bản cũ của Python.
Trong bài viết này, bạn sẽ tìm hiểu một thao tác cơ bản nhất với string: split, concatenate và join. Bạn không những tìm hiểu cách sử dụng những công cụ này mà còn cả cái nhìn sâu rộng về cách thức hoạt động đằng sau chúng.
Splitting Strings
Trong Python, string được biểu diễn bởi các đối tượng
str
. String có tính bất biến (immutable): điều này có nghĩa là đối tượng được lưu trong bộ nhớ không thể bị thay đổi. Hai sự thật này có thể giúp bạn tìm hiểu (và sau đó là nhớ) cách sử dụng
.split()
.
Bạn đã đoán được hai đặc tính của string liên quan thế nào đến tính năng split trong Python chưa? Nếu bạn đoán
.split()
là một instance method bởi vì string là một kiểu đặc biệt, có thể bạn đúng! Ở một số ngôn ngữ khác (như Perl), string là đầu vào của hàm
.split()
thay vì một method gọi bởi chính string đó.
Note: Ways to Call String Methods
Các method như
.split()
được trình bày ở đây chủ yếu như là các instance method. Chúng có thể được gọi như các static method nhưng điều này thực sự không lý tưởng. Ví dụ:
# Avoid this: str.split('a,b,c', ',')
Cái này trông kềnh càng và khó sử dụng so với cách thông thường:
# Do this instead: 'a,b,c'.split(',')
Để tìm hiểu thêm về instance, class và static method trong Python, vui lòng bấm vào đây.
Còn đặc tính bất biến của string thì sao? Điều này nhắc nhở bạn rằng là các method của string không phải là các thao tác in-place (in-place operation), mà chúng trả về một đối tượng mới trong bộ nhớ.
Note: In-Place Operations
Các thao tác in-place là các thao tác trực tiếp thay đổi đối tượng được gọi. Một ví dụng phổ biến là method
.append()
được sử dụng với list: Khi bạn gọi
.append()
với một list, list đó sẽ bị thay đổi trực tiếp bằng cách thêm một list khác vào.
Splitting Without Parameters
Trước khi tìm hiểu sâu hơn, hãy cùng xét ví dụ sau:
>>> 'this is my string'.split() ['this', 'is', 'my', 'string']
Đây là một trường hợp đặc biệt của
.split()
. Khi không truyền vào separator,
.split()
sẽ coi khoảng trắng (whitespace) là separator.
Một đặc điểm khác của việc gọi
.split()
mà không truyền tham số chính là nó sẽ tự động bỏ đi các khoảng trắng ở đầu và cuối cũng như là các khoảng trắng liên tiếp. Hãy so sánh việc gọi
.split()
trong hai trường hợp có separator và không có separator:
>>> s = ' this is my string ' >>> >>> s.split() ['this', 'is', 'my', 'string'] >>> >>> s ' this is my string ' >>> >>> s.split(' ') ['', 'this', '', '', 'is', '', 'my', 'string', '']
Điều đầu tiên cần chú ý chính là tính bất biến của string trong Python. Có thể thấy là giá trị của string không hề bị thay đổi.
Điều thứ hai chính là việc gọi hàm
.split()
mà không có tham số sẽ trích xuất ra các từ trong câu và loại bỏ các khoảng trắng.
Specifying Separators
Mặt khác,
.split(' ')
tầm thường hơn rất nhiều. Khi có các khoảng trắng ở đầu hoặc ở cuối, bạn sẽ nhận được các string rỗng – bạn có thể thấy chúng ở phần tử đầu tiên và cuối cùng của list trả về.
Còn khi có nhiều separator liên tiếp (ví dụ như giữa “this” với “is” và giữa “is” với “my”), ký tự đầu tiên sẽ được coi như là separator, các ký tự tiếp theo sẽ được trả về là string rỗng.
Note: Separators in Calls to
.split()
Khi sử dụng khoảng trắng đơn (single space character) làm separator, bạn không bị giới hạn bởi kiểu ký tự hay chiều dài string mà bạn dùng để làm separator. Yêu cầu duy nhất chính là separator phải là string.
Limiting Splits With Maxsplit
.split()
có một tham số không bắt buộc là
maxsplit
. Mặc định,
.split()
sẽ tạo ra tối đa lượng phân đoạn. Tuy nhiên khi bạn truyền giá trị cho
maxsplit
, số phân đoạn tối đa chính bằng giá trị này:
>>> s = "this is my string" >>> s.split(maxsplit=1) ['this', 'is my string']
Concatenating and Joining Strings
Một phép toán cơ bản khác là nối string.
Concatenating With the + Operator
Có vài cách để thực hiện điều này, tùy vào những thứ mà bạn muốn nhận được. Cách đơn giản và phổ biến nhất chính là sử dụng toán tử để nối các string với nhau:
>>> 'a' + 'b' + 'c' 'abc'
Tiếp tục, về mặt toán học, bạn có thể nhân một string để lặp lại nó:
>>> 'do' * 2 'dodo'
Hãy nhớ rằng: string có tính bất biến! Nếu bạn nối hoặc nhân một string được lưu bởi một biến, bạn phải gán chuỗi mới cho một biến khác để lưu nó.
>>> orig_string = 'Hello' >>> orig_string + ', world' 'Hello, world' >>> orig_string 'Hello' >>> full_sentence = orig_string + ', world' >>> full_sentence 'Hello, world'
Một chú ý khác chính là việc Python không hỗ trợ ép kiểu ẩn đối với string:
>>> 'Hello' + 2 Traceback (most recent call last): File "
", line 1, in
TypeError: must be str, not int
Đây là một điều mới mẻ nếu bạn mới nhảy sang Python từ một ngôn ngữ kiểu JavaScript.
Concatenating With .join()
Một cách khác, mạnh mẽ hơn để nối các string: method
.join()
.
Trường hợp phổ biến chính là khi bạn có một iterable – ví dụ một list – gồm các string và bạn muốn kết hợp các string đó thành một string đơn. Tương tự
.split()
,
.join()
là một instance method của string:
>>> strings = ['do', 're', 'mi'] >>> ','.join(strings) 'do,re,mi'
Ở đây, chúng ta nối mỗi phần tử của
strings
bởi một dấu phẩy ( – joiner).
.join()
thông minh ở chỗ nó thêm joiner vào giữa các string trong iterable mà bạn muốn nối, thay vì thêm joiner và cuối mỗi string. Điều này có nghĩa là nếu iterable có size là , bạn sẽ không thấy joiner:
>>> 'b'.join(['a']) 'a'
Nguồn: https://realpython.com/python-string-split-concatenate-join/
All rights reserved
Tìm hiểu về thư viện Numpy trong Python(Phần 2)
Bài đăng này đã không được cập nhật trong 3 năm
Trong bài viết trước tôi đã giới thiệu cho bạn về NumPy, lợi ích của nó, cách cài đặt nó để sử dụng, tìm hiểu về Mảng trong NumPy, kiểu dữ liệu trong NumPy. Trong bài viết này chúng ta sẽ tiếp tục tìm hiểu về các kiểu dữ liệu khác trong NumPy
Các bước cơ bản
Trước hết, bạn cần có các khung dữ liệu để hợp nhất. Bạn có thể tạo một số dữ liệu giả để thử nghiệm.
1.1 Tạo khung dữ liệu bằng Python
Bước đầu tiên, hãy nhập thư viện Pandas vào file Python của bạn. Pandas là một thư viện của bên thứ ba xử lý khung dữ liệu bằng Python. Bạn có thể sử dụng câu lệnh import (nhập) để sử dụng thư viện, như sau:
import pandas as pd
Bạn có thể gán một bí danh (alias) cho tên thư viện.
Bạn cần tạo từ điển, sau đó có thể chuyển đổi chúng thành các khung dữ liệu. Để có kết quả tốt nhất, hãy tạo hai biến từ điển — dict1 và dict2— để lưu trữ các phần thông tin cụ thể:
dict1 = {"user_id": ["001", "002", "003", "004", "005"], "FName": ["John", "Brad", "Ron", "Roald", "Chris"], "LName": ["Harley", "Cohen", "Dahl", "Harrington", "Kerr-Hislop"]} dict2 = {"user_id": ["001", "002", "003", "004"], "Age": [15, 28, 34, 24]}
Hãy nhớ rằng, bạn cần có một phần tử chung trong cả hai giá trị từ điển, để đóng vai trò là khóa chính để kết hợp các khung dữ liệu của bạn sau này.
1.2 Chuyển từ điển của bạn thành khung dữ liệu
Để chuyển đổi các giá trị từ điển của bạn thành khung dữ liệu, bạn có thể sử dụng phương pháp sau:
df1 = pd.DataFrame(dict1) df2 = pd.DataFrame(dict2)
Một số IDE cho phép bạn kiểm tra các giá trị trong khung dữ liệu bằng cách tham chiếu đến chức năng DataFrame và nhấn Run/Execute. Có nhiều IDE tương thích với Python , vì vậy bạn có thể chọn một IDE dễ học nhất.
Khi bạn đã hài lòng với nội dung của khung dữ liệu của mình, bạn có thể chuyển sang bước hợp nhất.
Hàm concatenate () là một hàm từ gói NumPy. Về cơ bản, hàm này kết hợp các mảng NumPy với nhau. Hàm này về cơ bản được sử dụng để nối hai hoặc nhiều mảng có cùng hình dạng dọc theo một trục được chỉ định. Có những điều cần thiết sau đây cần ghi nhớ:
NumPy’s concatenate () không giống như một phép nối cơ sở dữ liệu truyền thống. Nó giống như việc xếp chồng các mảng NumPy.
Các bài viết liên quan:
Chức năng này có thể hoạt động theo cả chiều dọc và chiều ngang. Điều này có nghĩa là chúng ta có thể nối các mảng với nhau theo chiều ngang hoặc chiều dọc.
Hàm concatenate () thường được viết dưới dạng np.concatenate (), nhưng chúng ta cũng có thể viết nó dưới dạng numpy.concatenate (). Nó phụ thuộc vào cách nhập gói numpy, nhập numpy dưới dạng np hoặc nhập numpy, tương ứng.
Cú pháp
numpy.concatenate ((a1, a2, …), axis)
Parameter
- (a1, a2, …)
Tham số này xác định trình tự của mảng. Ở đây, a1, a2, a3 … là các mảng có hình dạng giống nhau, ngoại trừ chiều tương ứng với trục.
- axis: int (tùy chọn)
Tham số này xác định trục mà mảng sẽ được nối với nhau. Theo mặc định, giá trị của nó là 0.
Nó sẽ trả về một ndarray chứa các phần tử của cả hai mảng.
Xem thêm Duyệt mảng trong NumPy
Ví dụ 1: numpy.concatenate ()
import numpy as np x=np.array([[1,2],[3,4]]) y=np.array([[12,30]]) z=np.concatenate((x,y)) z
Trong đoạn code trên
- Chúng tôi đã tạo một mảng ‘x’ bằng cách sử dụng hàm np.array ().
- Sau đó, chúng ta đã tạo một mảng khác ‘y’ bằng cách sử dụng cùng một hàm np.array ().
- Chúng tôi đã khai báo biến ‘z’ và gán giá trị trả về của hàm np.concatenate ().
- Chúng ta đã chuyển mảng ‘x’ và ‘y’ trong hàm.
- Cuối cùng, chúng tôi đã in giá trị của ‘z’.
Trong đầu ra, giá trị của cả hai mảng, tức là ‘x’ và ‘y’ được hiển thị theo trục = 0.
Đầu ra:
Ví dụ 2: numpy.concatenate () với axis = 0
import numpy as np x=np.array([[1,2],[3,4]]) y=np.array([[12,30]]) z=np.concatenate((x,y), axis=0) z
Output:
Ví dụ 3: numpy.concatenate () với axis = 1
import numpy as np x=np.array([[1,2],[3,4]]) y=np.array([[12,30]]) z=np.concatenate((x,y.T), axis=1) z
Output:
Trong ví dụ trên, ‘.T’ được sử dụng để thay đổi các hàng thành cột và cột thành hàng.
Xem thêm Sử dụng Linear Algebra trong Numpy
Ví dụ 4: numpy.concatenate () với axis = None
import numpy as np x=np.array([[1,2],[3,4]]) y=np.array([[12,30]]) z=np.concatenate((x,y), axis=None) z
Output:
Trong các ví dụ trên, chúng ta đã sử dụng hàm np.concatenate (). Chức năng này không được bảo toàn che các đầu vào MaskedArray. Có một cách sau đây mà qua đó chúng ta có thể nối các mảng có thể duy trì việc che các đầu vào MaskedArray.
Ví dụ 5: np.ma.concatenate ()
import numpy as np x=np.ma.arange(3) y=np.arange(3,6) x[1]=np.ma.masked x y z1=np.concatenate([x,y]) z2=np.ma.concatenate([x,y]) z1 z2
Trong đoạn code trên
- Chúng tôi đã tạo một mảng ‘x’ bằng cách sử dụng hàm np.ma.arrange ().
- Sau đó, chúng ta đã tạo một mảng ‘y’ khác bằng cách sử dụng cùng một hàm np.ma.arrange ().
- Chúng tôi đã khai báo biến ‘z1’ và gán giá trị trả về của hàm np.concatenate ().
- Chúng tôi đã khai báo biến ‘z2’ và gán giá trị trả về của hàm np.ma.concatenate ().
- Cuối cùng, chúng tôi đã cố gắng in giá trị của ‘z1’ và ‘z2’.
Xem thêm
Keywords searched by users: hàm concatenate trong python
Categories: Phát hiện thấy 62 Hàm Concatenate Trong Python
See more here: kientrucannam.vn
See more: https://kientrucannam.vn/vn/