gpt4 book ai didi

Python解析数据框元素

转载 作者:行者123 更新时间:2023-11-30 22:55:10 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com