【问题标题】:Python parse dataframe elementPython解析数据框元素
【发布时间】:2016-05-27 21:58:20
【问题描述】:

我有一个 pandas 数据框列(数据类型),我想将它分成三列

target_table_df = LoadS_A [['Attribute Name',
                              'Data Type',
                              'Primary Key Indicator']]

示例输入 (target_table_df)

                 Attribute Name      Data Type Primary Key Indicator
0                       ACC_LIM  DECIMAL(18,4)                 False
1                        ACC_NO   NUMBER(11,0)                 False
2                   ACC_OPEN_DT           DATE                 False
3                          ACCB  DECIMAL(18,4)                 False
4                          ACDB  DECIMAL(18,4)                 False
5                     AGRMNT_ID   NUMBER(11,0)                  True
6                     BRNCH_NUM   NUMBER(11,0)                 False
7                      CLRD_BAL  DECIMAL(18,4)                 False
8              CR_INT_ACRD_GRSS  DECIMAL(18,4)                 False
9               CR_INT_ACRD_NET  DECIMAL(18,4)                 False

我的目标是:

  • “数据类型”重新分配给括号前面的文本

[..如果“数据类型”中存在括号]:

  • 创建新列 'Precision' 并分配给第一个逗号分隔 价值
  • 创建新列 'Scale' 并分配给第二个逗号分隔值

因此,预期输出将变为:

    Data Type   Precision   Scale
0   decimal 18  4
1   number  11  0
2   date        
3   decimal 18  4
4   decimal 18  4
5   number  4   0

我已经愤怒地尝试实现这一点,但我是数据框的新手......如果我要遍历所有行或者是否有办法应用到数据框中的所有值,我无法解决?

非常感谢任何帮助

【问题讨论】:

  • 请提供样例输入输出。
  • 提供了示例输出。示例输入是标记为“数据类型”值的内容。为任何帮助干杯

标签: python regex parsing pandas dataframe


【解决方案1】:

使用target_table_df['Data Type'].str.extract(pattern)

您需要将pattern 指定为一个正则表达式,用于捕获您要查找的每个组件。

pattern = r'([^\(]+)(\(([^,]*),(.*)\))?'

([^\(]+) 表示尽可能多地抓取非开括号字符,直到第一个开括号。

\(([^,]*, 表示在左括号后抓取第一组非逗号字符并在逗号处停止。

,(.*)\) 表示抓取逗号和右括号之间的其余字符。

(\(([^,]*),(.*)\))? 说整个括号的事情可能不会发生,如果可以的话,抓住它。

解决方案

一切看起来像这样:

pattern = r'([^\(]+)(\(([^,]*),(.*)\))?'
df = s.str.extract(pattern, expand=True).iloc[:, [0, 2, 3]]

# Formatting to get it how you wanted
df.columns = ['Data Type', 'Precision', 'Scale']
df.index.name = None
print df

我在末尾放了一个.iloc[:, [0, 2, 3]],因为我使用的模式抓住了1 列中的整个括号,我想跳过它。放下来看看。

  Data Type Precision Scale
0   decimal        18     4
1    number        11     0
2      date       NaN   NaN
3   decimal        18     4
4   decimal        18     4
5    number        11     0

【讨论】:

    猜你喜欢
    • 2022-11-27
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2015-11-14
    • 1970-01-01
    相关资源
    最近更新 更多