Python 遍历字符串列并对Pandas中的单元格值进行排序
假设我们有以下数据帧:Python 遍历字符串列并对Pandas中的单元格值进行排序,python,python-3.x,pandas,Python,Python 3.x,Pandas,假设我们有以下数据帧: 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.s
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
我想知道如何在整个数据帧中实现这一点?我试图选择字符串对象并执行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循环中进行测试,以确保您没有将其应用于int
for col in df.columns:
if df[col].dtypes is 'str':
df[col] = df[col].map(lambda x: '; '.join(sorted(x.split('; '))))
也许有更好的矢量化方法您可以使用此技巧(解包数据帧并使用pd.dataframe.assign
):
输出:
col1 col2 col3
0 banana; cat a; c; d 4
1 apple; kiwi; orange c; p; u 1
2 melon a; m 4
谢谢,但是不应该
is
be==
?==
将返回False或True,当我们对列进行排序时,它将全部为False,除非每一行都已排序。。。我想我已经失去了你的评论。
col1 col2 col3
0 banana; cat a; c; d 4
1 apple; kiwi; orange c; p; u 1
2 melon a; m 4