A B
1 aa 1234
2 ab 3456
3 bc [1357, 2468]
4 cc 8901
...
我需要遍历B列,并将方括号([])中的所有值替换为这些方括号中的左四个数字,因此数据集将如下所示:
A B
1 aa 1234
2 ab 3456
3 bc 1357
4 cc 8901
...
for item in df['B']:
if len(item) > 4:
item_v = str(item[1:5])
df['B'][item] = item_v
print(df['B'][item])
它打印出截断的值,但是,如果我检查df的头部,它仍然具有旧值:
> df['B'].head()
> A B
1 aa 1234
2 ab 3456
3 bc [1357, 2468]
4 cc 8901
...
我究竟做错了什么?
解决方法:
最简单,最快的方法是使用Pandas str.get()函数并创建另一列以获得所需结果.
解决方案1
如果您在B中的值是整数[1234,3456,[1357,2468],8901],则第一个解决方案有效
df['C'] = df['B'].str.get(0).astype(float)
df.C.fillna(df['B'], inplace=True)
df['C'] = df.C.astype(int, inplace=True)
输出:
A B C
0 aa 1234 1234
1 ab 3456 3456
2 bc [1357, 2468] 1357
3 cc 8901 8901
然后,您可以删除不需要的列B.
解决方案#2
如果您在B中的值是字符串[‘1234′,’3456’,[‘1357′,’2468′],’8901’],则此解决方案有效
import re
df['digits'] = df['B'].apply(lambda x: re.findall('\d+', str(x)))
df['digits'] = df['digits'].str.get(0)
print(df)
输出:
A B digits
0 aa 1234 1234
1 ab 3456 3456
2 bc [1357, 2468] 1357
3 cc 8901 8901
同样,如果不需要,您可以删除B列.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。