首页 > 解决方案 > 熊猫:在第一个数字出现之前取所有字符

问题描述

考虑下面的数据框:

import pandas as pd

df = pd.DataFrame({'Ticker': ['EWZ US 05/29/20 P27', 'HSI US 12/30/20 C24800', 'TLT US 06/19/20 C225'],
                   'Market': ['US NYSE', 'US NYSE', 'HK HKSE']})
df

我需要创建一个新列,其中包含出现在第一个数字之前的所有字符df['Ticker']。我正在尝试以下方法:

numbers = [0,1,2,3,4,5,6,7,8,9]
f = lambda x: len(df['Ticker'].split(numbers)) -1
df['Reduced_Ticker'] = df.apply(f, axis=1)

但我收到以下错误:'Series' object has no attribute 'split'。任何人都可以帮忙吗?预期输出:

        Ticker         |  Market | Reduced_Ticker
EWZ US 05/29/20 P27    | US NYSE | EWZ US
HSI US 12/30/20 C24800 | US NYSE | HSI US
TLT US 06/19/20 C225   | HK HKSE | HK HKSE

标签: pythonpandas

解决方案


尝试:

df['Reduced_Ticker'] = df['Ticker'].str.extract('^(\D+)')

输出(末尾有多余的空格):

                   Ticker   Market Reduced_Ticker
0     EWZ US 05/29/20 P27  US NYSE        EWZ US 
1  HSI US 12/30/20 C24800  US NYSE        HSI US 
2    TLT US 06/19/20 C225  HK HKSE        TLT US 

要删除尾随空格,请使用以下链接str.strip()

df['Ticker'].str.extract('^(\D+)')[0].str.strip()

推荐阅读