我有一個像
name col1 col2
a aa 123
a bb 123
b aa 234
和一個清單
[1, 2, 3]
我想用 col1 = 'aa' 替換每一行的 col2 與串列
name col1 col2
a aa [1, 2, 3]
a bb 123
b aa [1, 2, 3]
我試過類似的東西
df.loc[df[col1] == 'aa', col2] = [1, 2, 3]
但它給了我錯誤:
ValueError: could not broadcast input array from shape (xx,) into shape (yy,)
我應該如何解決這個問題?
uj5u.com熱心網友回復:
讓它變得簡單。np.where 應該做的。下面的代碼
df['col2']=np.where(df['col1']=='aa', str(lst), df['col2'])
或者使用 pd.Series 將串列鎖定在雙括號中
df['col2']=np.where(df['col1']=='aa', pd.Series([lst]), df['col2'])
uj5u.com熱心網友回復:
import pandas as pd
df = pd.DataFrame({"name":["a","a","b"],"col1":["aa","bb","aa"],"col2":[123,123,234]})
l = [1,2,3]
df["col2"] = df.apply(lambda x: l if x.col1 == "aa" else x.col2, axis =1)
df
uj5u.com熱心網友回復:
帶有 if/else 的串列理解應該可以作業
df['col2'] = [x['col2'] if x['col1'] != 'aa' else [1,2,3] for ind,x in df.iterrows()]
uj5u.com熱心網友回復:
使用 for 回圈是安全的
df.col2 = df.col2.astype(object)
for x in df.index:
if df.at[x,'col1'] == 'aa':
df.at[x,'col2'] = [1,2,3]
df
name col1 col2
0 a aa [1, 2, 3]
1 a bb 123
2 b aa [1, 2, 3]
uj5u.com熱心網友回復:
您還可以使用:
data = {'aa':[1,2,3]}
df['col2'] = np.where(df['col1'] == 'aa', df['col1'].map(data), df['col2'])
您應該小心使用它,因為這樣做會將串列更改為兩個位置:
df['col2'].loc[0].append(5)
print(df)
#OUTPUT
name col1 col2
0 a aa [1, 2, 3, 5]
1 a bb 123
2 b aa [1, 2, 3, 5]
但這很好:
df = df.loc[1:]
print(df)
#OUTPUT
name col1 col2
1 a bb 123
2 b aa [1, 2, 3]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/398841.html
上一篇:當使用df1[~df1.isin(df2)].dropna()問題
下一篇:連接多個具有相同列名的CSV
