-1

我有一个熊猫数据框,其中包含一列带有模式的句子:列的第 1 行:“ID 为 123 或 ID 为 234 或 ID 为 345”列的第 2 行:“ID 为 123 或 ID 为 567 或 ID 为876" 列的第 3 行:“ID 为 567 或 ID 为 567 或 ID 为 298”。

我的目标是提取每一行中的数字并将它们保存在列表或 numpy 数组中。由于有一个模式(数字总是在“ID is”之后,我认为正则表达式可能是最好的方法(但我不确定如何使用正则表达式在 1 个字符串中进行多次提取。

有什么建议吗?

4

1 回答 1

0

标准模块re可以使用'\d+'

re.findall('\d+', "ID is 123 or ID is 234 or ID is 345")

获取列表[123,234,345]

为了确保您也可以使用'ID is (\d+)'

re.findall('ID is (\d+)', "ID is 123 or ID is 234 or ID is 345")

DataFrame您可以使用.str.findall()对所有行执行相同的操作。

import pandas as pd


df = pd.DataFrame({
  'ID': [
    "ID is 123 or ID is 234 or ID is 345",
    "ID is 123 or ID is 567 or ID is 876",
    "ID is 567 or ID is 567 or ID is 298",
  ]
})

print('\n--- before ---\n')
print(df)
 
df['result'] = df['ID'].str.findall('ID is (\d+)')

print('\n--- after ---\n')
print(df)

结果:

--- before ---

                                    ID
0  ID is 123 or ID is 234 or ID is 345
1  ID is 123 or ID is 567 or ID is 876
2  ID is 567 or ID is 567 or ID is 298

--- after ---

                                    ID           result
0  ID is 123 or ID is 234 or ID is 345  [123, 234, 345]
1  ID is 123 or ID is 567 or ID is 876  [123, 567, 876]
2  ID is 567 or ID is 567 or ID is 298  [567, 567, 298]

如果您只需要列resultnumpy array那么您可以获得df['result'].values.

如果您需要嵌套列表:df['result'].values.tolist().

于 2022-02-16T00:43:35.363 回答