如何在python中的lambda中返回拆分的第一项?

时间:2019-04-11 00:01:34

标签: python pandas dataframe lambda split

所以我需要拆分一个数据框架列,并使用lambda函数将第一项放入一个新列中。我不知道该怎么做。

df['Reason'] = df['title'].apply(lambda x: x.split(':'))

我现在正在得到这个:

df['Reason'].head()

0     [EMS,  BACK PAINS/INJURY]
1    [EMS,  DIABETIC EMERGENCY]
2        [Fire,  GAS-ODOR/LEAK]
3     [EMS,  CARDIAC EMERGENCY]
4             [EMS,  DIZZINESS]

我想要:

df['Reason'].head()

0     [EMS]
1     [EMS]
2     [Fire]
3     [EMS]
4     [EMS]

4 个答案:

答案 0 :(得分:2)

我在此处将str.findallregex一起使用

df.text.str.findall(r"^\w+").str[0]
0     abc
1     foo
2    test
3     NaN
Name: text, dtype: object

答案 1 :(得分:1)

df = pd.DataFrame({'text': ['abc xyz', 'foo bar', 'test', np.nan]})
df

      text
0  abc xyz
1  foo bar
2     test
3      NaN

使用任何str方法。例如,str.split

df['text'].str.split(n=1).str[0]

0     abc
1     foo
2    test
3     NaN
Name: text, dtype: object

str.partition

df['text'].str.partition(' ')[0]

0     abc
1     foo
2    test
3     NaN
Name: text, dtype: object

以上方法使使用NaN变得容易。 apply在这里将失败:

df['text'].apply(lambda x: x.split(':')[0])
# ---------------------------------------------------------------------------
# AttributeError                            Traceback (most recent call last)
# AttributeError: 'float' object has no attribute 'split'

isinstance检查是解决此问题的方法,

df['text'].apply(lambda x: x.split(None, 1)[0] if isinstance(x, str) else np.nan)

0     abc
1     foo
2    test
3     NaN
Name: text, dtype: object

答案 2 :(得分:1)

如果您的一栏中有lists,请直接进行

df['Readon'].str[0]

df['Readon'].str.get(0)

输出

0     [EMS]
1     [EMS]
2     [Fire]
3     [EMS]
4     [EMS]

答案 3 :(得分:0)

获取split()返回的列表的第一项:

df['Reason'] = df['title'].apply(lambda x: x.split(':')[0])

要获得额外的信用,请告诉split()仅拆分一次,这样它就不会再拆分更多的项目而只是扔掉它们。

df['Reason'] = df['title'].apply(lambda x: x.split(':', 1)[0])

或改用partition()

df['Reason'] = df['title'].apply(lambda x: x.partition(':')[0])