为了账号安全,请及时绑定邮箱和手机立即绑定

在熊猫中按位置提取数字?

在熊猫中按位置提取数字?

千万里不及你 2021-04-09 10:11:50
我有一个df:                  col10       011392902010011       011392901010012       011392902010023       011392901010024       011392902010035       011392901010036       011392902010047       011393101010018       011392902010059       01139290301001            ...      5908      01139ÅÊ210205909      01139ÅÊ210135910      01139ÅÊ110085911      01139ÅÊ210115912      01139ÅÊ03003在int唯一的情况下,我需要将前7个数字提取到新列中;在包含字符的情况下,我需要将前5和8,9个数字提取到新列中。我将这段代码尝试到一个组成的数据帧上,尝试解决该问题的方法,它可以工作,但是当我在实际数据集上尝试它时,它并没有按预期工作,主要原因是我的实际数据中df有整数,并且对他们。df['col2']=df[col1][0:5]+df['col1'][8]0       01139290201001011392902010051       01139290101001011392902010052       01139290201002011392902010053       01139290101002011392902010054       01139290201003011392902010055                                NaN6                                NaN7                                NaN8                                NaN9                                NaN还为什么会导致NaN值?我希望它看起来像这样: 01139290201001 to 0113929 for integer only rows and like this for the others 01139ÅÊ03003 to 0113903
查看完整描述

1 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

使用 .apply


前任:


import pandas as pd

df = pd.DataFrame({"col1": ["01139290201001", "01139290101001", "01139290201002", "01139ÅÊ21020", "01139ÅÊ21013", "01139ÅÊ11008"]})

df["col2"] = df["col1"].apply(lambda x: x[:7] if x.isdigit() else x[:5]+x[9:11] )

print(df)

输出:


             col1     col2

0  01139290201001  0113929

1  01139290101001  0113929

2  01139290201002  0113929

3    01139ÅÊ21020  0113921

4    01139ÅÊ21013  0113921

5    01139ÅÊ11008  0113911


查看完整回答
反对 回复 2021-04-13
  • 1 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号