簡體   English   中英

遍歷字符串列並對 Pandas 中的單元格值進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM