所以我需要拆分一个数据框架列,并使用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]
答案 0 :(得分:2)
我在此处将str.findall
与regex
一起使用
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])