gpt4 book ai didi

python - 如何根据条件替换 Panda 数据框列中的单元格

转载 作者:行者123 更新时间:2023-12-01 04:19:00 27 4
gpt4 key购买 nike

这篇文章由两个问题组成,涉及我在尝试根据给定条件替换 Panda 数据框中的元素时遇到的问题。我是 Pandas 新手,所以任何建议都会非常有帮助。

1:修改一定长度的字符串

考虑 Panda 数据框对象中的 A 列,df:

SSIC
103
1040
1054
1065
107

我想将整数 0 附加到长度小于 4 的每个单元格。也就是说,我想获得:

SSIC
0103
1040
1054
1065
0107

值的类型为 float64。

目前我使用的方法是:

SSIC1 = df['SSIC'].astype('int64').astype(str)

for i,n in enumerate(SSIC1):
if len(SSIC1[i]) == 4:
SSIC1[i] = '0' + SSIC1[i]

df['SSIC'] = SSIC1

它确实有效,但我想知道它是否相当冗长。有没有更直接的方法来解决这个问题?

2:使用where子句时设置复制警告

我的数据框中有以下两列

A  B
2 1
3 4
4 6
5 4
5 2

我想将 A 列中值为 5 的单元格替换为 B 中同一行的值。

我使用了where条件:

df['A']=df['A'].where(df['A'] == 5, df['B'], inplace=True)

​但它给了我以下错误:

SettingWithCopyWarning: A value is trying to be set on a copy of aslice from a DataFrame. Try using .loc[row_indexer,col_indexer] =value instead

See the caveats in the documentation:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copyif name == 'main':

我第一次运行时没有出现此警告。你知道它为什么会出现吗?

最佳答案

对于您的第一部分,请调用矢量化 str.zfill :

In [167]:
df['SSIC'].astype(str).str.zfill(4)

Out[167]:
0 0103
1 1040
2 1054
3 1065
4 0107
Name: SSIC, dtype: object

如果 dtype 已经是 str,您可能不需要调用 astype

关于python - 如何根据条件替换 Panda 数据框列中的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33939941/

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