如何在Pandas/Numpy中添加列?一维元组元素Numpy数组扩展方法
Hey there! Let's tackle your two questions one by one, with practical code examples to make things clear.
1. Adding Columns in Pandas or NumPy
Pandas
Pandas makes adding columns straightforward, with a few flexible options:
- Direct Assignment (Simplest Approach)
Just assign values to a new column name—this modifies the DataFrame in-place:import pandas as pd df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) # Add a column with a constant value df['C'] = 7 # Add a column calculated from existing columns df['D'] = df['A'] + df['B'] - Using
assign()(Chainable, Non-Destructive)
If you want to avoid modifying the original DataFrame and prefer chained operations, useassign():# Create a new DataFrame with additional columns new_df = df.assign(E=lambda x: x['A'] * 2, F=[10, 20, 30]) - Insert at a Specific Position
Useinsert()to place the new column at a specific index:# Insert column 'G' at position 1 (between 'A' and 'B') df.insert(1, 'G', [100, 200, 300])
NumPy
NumPy arrays are fixed-size, so adding a column means creating a new array. Here are common methods:
- Using
np.hstack()(Horizontal Stack)
Combine the original array with a new 2D column array:import numpy as np arr = np.array([[1, 2], [3, 4], [5, 6]]) # Create a new column (must be shape (n, 1)) new_col = np.array([[7], [8], [9]]) # Add the column to the original array new_arr = np.hstack((arr, new_col)) - Using
np.concatenate()
Similar tohstack, explicitly specifyaxis=1to stack columns:new_arr = np.concatenate((arr, new_col), axis=1) - For 1D Arrays
Reshape the 1D array to 2D first before adding columns:arr_1d = np.array([1, 2, 3]) # Reshape to (3,1) and combine with a new column new_arr = np.hstack((arr_1d.reshape(-1, 1), np.array([[4], [5], [6]])))
2. Adding Elements to Tuples in a (n,) NumPy Array
Since tuples are immutable, we can't modify them in-place—we need to create new tuples. Here are efficient ways to keep the array shape as (n,):
- List Comprehension (Fast & Readable)
This is the most straightforward method for this use case:# Original array with tuple elements (dtype=object is key here) arr = np.array([(1, 2), (3, 4), (5, 6)], dtype=object) # Add an element (e.g., 99) to each tuple new_arr = np.array([t + (99,) for t in arr], dtype=object) # Verify shape: new_arr.shape will be (3,) - Using
map()
A concise alternative if you prefer functional-style code:new_arr = np.array(list(map(lambda t: t + (99,), arr)), dtype=object) - Note on
np.vectorize()
While you can usenp.vectorize, it’s essentially a wrapper around a loop and won’t outperform list comprehensions here. Example:
Keep in mind that object-dtype arrays (storing tuples) don’t get the full vectorization speed of numeric arrays, but list comprehensions are still efficient for most practical cases.def add_element(t): return t + (99,) vectorized_add = np.vectorize(add_element) new_arr = vectorized_add(arr)
内容的提问来源于stack exchange,提问作者Christopher Bell
相关产品推荐
相关产品推荐

