Python解析数据框元素

标签 python regex parsing pandas dataframe

我有一个 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

我愤怒地尝试实现这一目标,但我对数据帧不熟悉......无法确定我是否要迭代所有行,或者是否有办法应用于数据帧中的所有值?

非常感谢任何帮助

最佳答案

使用target_table_df['数据类型'].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

关于Python解析数据框元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37484646/

相关文章:

regex - 使用 sed 删除 html 注释标签

regex - 将创建的颜色代码添加到字体锁定

java - 如何使用 JSON 将此 PHP 解析为 Java?

html - 在 IOS 8 中解析 HTML 并获取特定标签

python - 将数据输入 SQLite

python - Pandas 转换列表值及其列名称

python - PyQt GUI 在 Python 中多线程时卡住,直到线程完成

Python 检查模块 : keyword only args

ruby-on-rails - 具有嵌套路由的 Rails 路由约束

jquery - 请求的 JSON 解析失败