gpt4 book ai didi

python - 如何使用 pandas 更改列值和排序?

转载 作者:行者123 更新时间:2023-11-30 22:56:24 24 4
gpt4 key购买 nike

我有以下 pandas DataFrame。

import pandas as pd
df = pd.read_csv('filename.csv')

print(df)

cat A B C
0 cat1 0.787575 0.159330 0.053095
1 cat10 0.770698 0.169487 0.059815
2 cat11 0.792689 0.152043 0.055268
3 cat12 0.785066 0.160361 0.054573
4 cat13 0.795455 0.150464 0.054081
5 cat14 0.794873 0.150700 0.054426
.. ....
8 cat19 0.811585 0.140207 0.048208
9 cat2 0.797202 0.152033 0.050765
10 cat20 0.801607 0.145137 0.053256
11 cat21 0.792689 0.152043 0.055268
....

显然,cat1 的顺序不正确,因为 cat2 应该在 cat1 之后,而不是在 cat19 之后.

可以用什么方法来纠正这个问题?

我的想法是重新标记每个单位数字 cat,然后使用 .sort() 进行排序。但是,我的方法不起作用。

df = df.rename(index={'cat1': 'cat01'})
df = df.rename(index={'cat2': 'cat02'})
df = df.rename(index={'cat3': 'cat03'})
...
df = df.rename(index={'cat9': 'cat09'})

看来必须将索引更改为cat列,然后使用上述方法进行排序。

但是,我仍然打字太多。实现这一目标的最佳方法是什么?

最佳答案

您可以使用正则表达式来提取数字(\d+ 表示一位或多位数字),使用 zfill对它们进行零填充,然后将 cat 添加回结果中。我已将 3 用于 zfill,因此 1 变为 001。您可以根据需要进行调整。

我还创建了一个掩码,仅将其应用于包含数字的行。

np.random.seed(0)
df = pd.DataFrame(np.random.randn(5,3), columns=list('ABC'))
df['cat'] = ['catZ', 'cat10', 'cat11', 'cat12', 'cat13']

digit_str = df.cat.str.extract(r'(\d+)').str.zfill(3)
mask = digit_str.notnull()
df.loc[mask, 'cat'] = 'cat' + digit_str[mask]

>>> df
A B C cat
0 1.764052 0.400157 0.978738 catZ
1 2.240893 1.867558 -0.977278 cat010
2 0.950088 -0.151357 -0.103219 cat011
3 0.410599 0.144044 1.454274 cat012
4 0.761038 0.121675 0.443863 cat013

关于python - 如何使用 pandas 更改列值和排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36989573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com