【问题标题】:Spliting text into pandas dataframe : dealing with different dimension将文本拆分为熊猫数据框:处理不同的维度
【发布时间】:2020-08-05 22:09:27
【问题描述】:

我正在尝试将 series 拆分为 pandas 列,但我正在处理以下问题:

df.head()

                 Opportunity Name     Amount Currency   Amount
       XXXX - XX - 2019 - 01 - 20                 ARS      300 
      YYY - YY - Y -2019 - 01 -21                 CHL      350
       ZZZZ - ZZ - 2019 - 03 - 25                 ARS      500
TT - TT - T - TT - 2019 - 04 - 26                 ARS     1000

每当我尝试获取一个新的数据框时,我可以将日期放在单独的列中。 我使用 str.split() 函数和 expands=True 和拆分分隔符 -

df['Opportunity Name'].str.split('-' , expand=True)

但是我的结果很混乱,很难用日期选择那些列,因为它是这样拆分的:

          0      1     2     3     4     5     6      
       XXXX     XX  2019    01    20  None  None
        YYY     YY     Y  2019    01    21  None
       ZZZZ     ZZ  2019    03    25  None  None
         TT     TT     T    TT  2019    04    26

这很难分割该数据框,我只想从该字符串 datafrane 列中获取日期

【问题讨论】:

    标签: python string dataframe series


    【解决方案1】:
    • 提供的真实数据与显示的示例数据一致,因为日期字符始终位于末尾。
    • 使用内置函数isnumeric 和列表理解来获取列表中的数字
    • ''.join([...][-8:]) 仅组合最后 8 个字符
    • .to_datetime 转换为数据时间格式
    df['Date'] = df['Opportunity Name'].apply(lambda x: ''.join([y for y in x if y.isnumeric()][-8:]))
    df['Date'] = pd.to_datetime(df['Date'])
    
    print(df)
    
                        Opportunity Name Amount Currency  Amount       Date
    0        XXXX - XX - 32019 - 01 - 20             ARS     300 2019-01-20
    1        YYY - YY - Y -2019 - 01 -21             CHL     350 2019-01-21
    2         ZZZZ - ZZ - 2019 - 03 - 25             ARS     500 2019-03-25
    3  TT - TT - T - TT - 2019 - 04 - 26             ARS    1000 2019-04-26
    

    获取第一个值

    df['first_value'] = df['Opportunity Name'].apply(lambda x: x.split('-')[0].strip())
    print(df)
    
                        Opportunity Name Amount Currency  Amount       Date first_value
    0        XXXX - XX - 32019 - 01 - 20             ARS     300 2019-01-20        XXXX
    1        YYY - YY - Y -2019 - 01 -21             CHL     350 2019-01-21         YYY
    2         ZZZZ - ZZ - 2019 - 03 - 25             ARS     500 2019-03-25        ZZZZ
    3  TT - TT - T - TT - 2019 - 04 - 26             ARS    1000 2019-04-26          TT
    

    【讨论】:

    • df['Opportunity Name'].str.split('-' , expand=True)[0] 这应该可以工作
    • 最后不会去掉空格,'XXXX '
    猜你喜欢
    • 2018-04-26
    • 1970-01-01
    • 2021-12-27
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    相关资源
    最近更新 更多