Dizzy2510
Dizzy2510

Reputation: 47

Assign list of arrays to several columns in Pandas DataFrame (Performance-optimized)

given the following DF: df = pd.DataFrame(data=np.random.randint(1,10,size=(10,4)),columns=list("abcd"),dtype=np.int64)

Lets say i want to update the first two columns with a list of two numpy arrays(having a specific dtype: e.g. np.int8 and np.float32) --> update_vals = [np.arange(1,11,dtype=np.int8),np.ones(10,dtype=np.float32)]

I can do the following that works: df[["a","b"]] = pd.DataFrame(dict(zip(list("ab"),update_vals)))

Expected outcome of Column Dtypes:

Is there maybe a faster way to do this?

Upvotes: 0

Views: 1212

Answers (1)

Corralien
Corralien

Reputation: 120409

Update

Why don't simply:

df['a'] = update_vals[0]
df['b'] = update_vals[1]
print(df.dtypes)

# Output:
a       int8
b    float32
c      int64
d      int64
dtype: object

Or:

for col, arr in zip(df.columns, update_vals):
    df[col] = arr

Use:

df[['a', 'b']] = np.array(update_vals).T
print(df)

# Output:
    a  b  c  d
0   1  1  1  2
1   2  1  5  1
2   3  1  4  8
3   4  1  6  3
4   5  1  3  4
5   6  1  8  2
6   7  1  3  1
7   8  1  8  7
8   9  1  4  1
9  10  1  3  6

Upvotes: 1

Related Questions