gpt4 book ai didi

python - 使用 Pandas 基于正则表达式分离列数据

转载 作者:行者123 更新时间:2023-12-04 01:04:03 25 4
gpt4 key购买 nike

我有一个如下所示的数据框

df = pd.DataFrame({'val': ['>1234','<>','<1000','<test','31sadj',123,43.21]})

我想创建 3 个新列

val_num - 将仅存储带有符号的数字值,例如:1234(来自 >1234)和 1000(来自 <1000)但不会存储 31(来自 31sadj),因为它没有任何符号

val_str - 将只存储 NUMBER 的混合值, symbols , ALPHABETS或者只是简单的字母表,例如:31sadj。它可以有任何符号,除了 > , < , =

val_symbol - 将仅存储 3 个符号,如 > , < , =

我试过下面的但它不准确

df['val_SYMBOL'] = df['val'].str.extract(r'([<>=]+)').fillna('=')
df['val_num'] = df['val'].str.extract(r'([0-9]+)')
df['val_str'] = df['val'].str.extract(r'([a-zA-Z0-9\s-]+)')

我希望我的输出如下所示

enter image description here

最佳答案

你可以使用

df['val_SYMBOL'] = df['val'].astype(str).str.extract(r'([<>=]+)').fillna('=')
df['val_num'] = df['val'].astype(str).str.extract(r'\b(\d+(?:\.\d+)?)\b')
df['val_str'] = df['val'].astype(str).str.extract(r'([^<>=]*[a-zA-Z][^<>=]*)')

您想处理混合数据类型的列,因此第一个操作是使用 astype(str) 将数据转换为字符串.

val_num列填充了 \b(\d+(?:\.\d+)?)\b匹配,整数或 float 作为整个单词匹配(\b 代表单词边界)。

val_str列填充了 ([^<>=]*[a-zA-Z][^<>=]*)匹配,搜索除 < 以外的零个或多个字符, >= , 然后是一个字母,然后是 < 以外的零个或多个字符, >= .

我得到的输出:

>>> df
val val_SYMBOL val_num val_str
0 >1234 > 1234 NaN
1 <> <> NaN NaN
2 <1000 < 1000 NaN
3 <test < NaN test
4 31sadj = NaN 31sadj
5 123 = 123 NaN
6 43.21 = 43.21 NaN

关于python - 使用 Pandas 基于正则表达式分离列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67090684/

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