熊猫从数据框中的一列中提取部分字符串并将其存储在一个新列中

Posted

技术标签:

【中文标题】熊猫从数据框中的一列中提取部分字符串并将其存储在一个新列中【英文标题】:Pandas extract part of string form a column in a dataframe and store it in a new column 【发布时间】:2022-01-06 07:32:01 【问题描述】:

我有下面的代码来创建一个数据框

import pandas as pd
df = 'Connection':['Home 10Mbps','Broadband 5 Mbps','128 Kbps Internet','Discounted 512Kbps 2 years contract']
df = pd.DataFrame (df)
df

我需要一种仅从“连接”列中提取带宽并将结果存储在名为“带宽”的新列中的方法,如下所示:

带宽

10 Mbps

5 Mbps

128 Kbps

512 Kbps

【问题讨论】:

您的数据不遵循某种模式,因此无法解析或至少难以解析。既然已经有了数据,为什么不在初始化dataframe的时候单独放到一列呢? 感谢您的回复,其实这是一个300 K记录数据集的一部分,我需要在清理和组织数据的过程中这样做 【参考方案1】:

确保使用所有可能的格式填写列表

lst = ['10Mbps', '10 Mbps', '5 Mbps', '128 Kbps', '512Kbps', '512 Kbps']
for i in lst:
   df.loc[df['Connection'].str.contains(i), 'bandwidth'] = i

lst1 = []
for j in df.bandwidth:
  if " " not in j:
    lst1.append((re.sub("[A-Za-z]+", lambda ele: " " + ele[0] + " ", j)[:-1]))
  else:
    lst1.append(j)

df['bandwidth']=lst1

# output
Connection                 bandwidth
Home 10Mbps                 10 Mbps
Broadband 5 Mbps            5 Mbps
128 Kbps Internet           128 Kbps
Discounted 512Kbps 2 years contract 512 Kbps

【讨论】:

谢谢,应该这样做,这个数据是我正在处理的 300 K 记录的一部分,我仍然需要解决如何统一这些值;数字和带宽单位之间有空格或没有空格,您知道如何做到这一点吗? 如果你是这个意思,我编辑了回复 完美,谢谢 不客气,如果一切正常,请接受答案。

以上是关于熊猫从数据框中的一列中提取部分字符串并将其存储在一个新列中的主要内容,如果未能解决你的问题,请参考以下文章

从列表列表中提取元素并将其分配为熊猫数据框列中的值

如何在 python 的另一列中的字符串值中从数据框中的一列中搜索字符串?

如何从包含文本的熊猫数据框中的列中提取年份(或日期时间)

从存储为熊猫数据框中的字符串的列表中提取项目

SQL Server 2012 Express 如何从一列中提取信息并将其与具有表达式限制的另一列进行比较

如何用同一数据框中其他列的实际列值替换一列中的字符串值?