[英]Going through string columns and sort cell values in Pandas
假設我們有以下 dataframe:
d = {'col1':['cat; banana','kiwi; orange; apple','melon'],
'col2':['a; d; c','p; u; c','m; a'],
'col3':[4,1,4]}
df= pd.DataFrame(d)
對於我想按字母順序對值進行排序的所有字符串列,我知道如何逐列執行此操作,即:
df['col1'] = df['col1'].map(lambda x: '; '.join(sorted(x.split('; '))))
同樣對於col2
,我想知道如何為整個 dataframe 做到這一點? 我試圖 select 字符串對象並執行 map 方法,但它沒有用。 即:
df.select_dtypes(include='object').map(lambda x: '; '.join(sorted(x.split('; '))))
更新:所以這樣做的一種低效方法是:
v = df.select_dtypes(include='object').applymap(lambda x: '; '.join(sorted(x.split('; '))))
w = df.select_dtypes(exclude='object')
pd.concat([v, w], axis=1)
但我相信還有更好的方法。
我會在低效的 for 循環中執行此操作,並進行測試以確保您沒有將其應用於整數
for col in df.columns:
if df[col].dtypes is 'str':
df[col] = df[col].map(lambda x: '; '.join(sorted(x.split('; '))))
也許有更好的矢量化方式
您可以使用此技巧(解壓縮 dataframe 並使用pd.DataFrame.assign
):
df.assign(**df.select_dtypes(include='object').applymap(lambda x: '; '.join(sorted(x.split('; ')))))
Output:
col1 col2 col3
0 banana; cat a; c; d 4
1 apple; kiwi; orange c; p; u 1
2 melon a; m 4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.