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

我有一个df:


                  col1

0       01139290201001

1       01139290101001

2       01139290201002

3       01139290101002

4       01139290201003

5       01139290101003

6       01139290201004

7       01139310101001

8       01139290201005

9       01139290301001

            ...      

5908      01139ÅÊ21020

5909      01139ÅÊ21013

5910      01139ÅÊ11008

5911      01139ÅÊ21011

5912      01139ÅÊ03003

在int唯一的情况下,我需要将前7个数字提取到新列中;在包含字符的情况下,我需要将前5和8,9个数字提取到新列中。


我将这段代码尝试到一个组成的数据帧上,尝试解决该问题的方法,它可以工作,但是当我在实际数据集上尝试它时,它并没有按预期工作,主要原因是我的实际数据中df有整数,并且对他们。


df['col2']=df[col1][0:5]+df['col1'][8]



0       0113929020100101139290201005

1       0113929010100101139290201005

2       0113929020100201139290201005

3       0113929010100201139290201005

4       0113929020100301139290201005

5                                NaN

6                                NaN

7                                NaN

8                                NaN

9                                NaN

还为什么会导致NaN值?


我希望它看起来像这样:


 01139290201001 to 0113929 for integer only rows and like this for the others

 01139ÅÊ03003 to 0113903


千万里不及你
浏览 136回答 1
1回答

Cats萌萌

使用 .apply前任:import pandas as pddf = 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     col20  01139290201001  01139291  01139290101001  01139292  01139290201002  01139293    01139ÅÊ21020  01139214    01139ÅÊ21013  01139215    01139ÅÊ11008  0113911
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python