gpt4 book ai didi

python - 在单个 Pandas Dataframe 列中将字符串与数字分开并创建两个新列

转载 作者:太空宇宙 更新时间:2023-11-03 12:43:25 25 4
gpt4 key购买 nike

令我震惊的是,之前没有人在 SO 上问过这个问题......因为这似乎是一个足够简单的问题。

我在 pandas Dataframe 中有一个列,如下所示:

df = pd.DataFrame(data=[['APPLEGATE WINERY    455.292049'],['AMAND FARM  849.827192'],['COBB FARM ST    1039.49357'],['DIRIGIA 2048.947284']], columns = ['Col1'])

Col1
0 APPLEGATE WINERY 455.292049
1 AMAND FARM 849.827192
2 COBB FARM ST 1039.49357
3 DIRIGIA 2048.947284

我只是想将字符串字符与数字分开,所以结果应该是这样的

Name                Area
APPLEGATE WINERY 455.292049
AMAND FARM 849.827192
COBB FARM ST 1039.49357
DIRIGIA 2048.947284

我知道我可以使用 Regular Expressions在 python 中,但这似乎有点矫枉过正,因为 a) 它只是数据类型的分离,并且 b) 字符串具有不同的长度并且数字具有不同的位数。

所以一个结果会开始看起来像这样:

df['Name'] = df.Col1.str.extract('([A-Z]\w{0,})', expand=True)
df['Area'] = df.Col1.str.extract('(\d)', expand=True)

但是否有一个很好、干净的解决方案来解决这个问题,而无需经历使用 RegEx 的麻烦,而是将字符串与数字分成两列?

最佳答案

使用单个 extract 调用。如果您使用此正则表达式,您还需要从结果中去除尾随空格。

df2 = (df['Col1'].str.extract(r'(?P<Name>.*?)(?P<Area>\d+(?:\.\d+)?)')
.applymap(str.strip))
df2
Name Area
0 APPLEGATE WINERY 455.292049
1 AMAND FARM 849.827192
2 COBB FARM ST 1039.49357
3 DIRIGIA 2048.947284

正则表达式分解

(?P<Name>   # first named capture group - "Name"
.*? # match anything (non-greedy)
)
(?P<Area> # second named group - "Area"
\d+ # match one or more digits,
(?:
\. # decimal
\d+ # trailing digits
)? # the `?` indicates floating point is optional
)

PS,要将“Area”列转换为数字,请使用 pd.to_numeric

关于python - 在单个 Pandas Dataframe 列中将字符串与数字分开并创建两个新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56672613/

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