如何从python中所有列的字符串中提取数字

Posted

技术标签:

【中文标题】如何从python中所有列的字符串中提取数字【英文标题】:How to extract numbers from strings on ALL the columns in python 【发布时间】:2021-07-01 20:04:54 【问题描述】:

使用str.extract() 从字符串中提取数字是可行的(见下文),但是当我必须在 30 多列上重复此操作时,它会很耗时。

原来是这样的:

yyyy
2014    110.7438016528926\K
2015    103.7533512064343\O
2016    111.6531165311653\L
2017                  nan\L
2018                  nan\E
Name: dips_cert_earning_premium_weekly, dtype: object

然后我写了这些代码:

df['dips_cert_earning_premium_weekly'] = df['dips_cert_earning_premium_weekly'].str.extract(r'(\d+(?:\.\d+)?)').astype(float)

输出:

yyyy
2014    110.743802
2015    103.753351
2016    111.653117
2017           NaN
2018           NaN
Name: dips_cert_earning_premium_weekly, dtype: float64

有没有更有效的方法来做到这一点?

【问题讨论】:

pypi.org/project/parse 试试这个,可能对你有帮助 【参考方案1】:

我不确定您的整个数据集是什么样子或您所说的慢是什么意思:需要几分钟吗?秒?小时?。但是,如果可能的话,您可以尝试不使用正则表达式的方法。例如:

letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\\"
def remove_letters(x):
    try:
        return float(x.strip(letters))
    except:
        return None

df['dips_cert_earning_premium_weekly'] = list(map(remove_letters,  df['dips_cert_earning_premium_weekly']))

如果数据集只有一列 31 行,则您的版本需要 0.0008417534828186036 秒,而我建议的版本需要 0.0003292644023895264 秒,因此略有不同,但值得尝试。 (我通过取 N=1000 次运行的时间来计算这个时间,然后取所有时间的平均值)

否则,请尝试分析您的代码以查看瓶颈所在并尝试不同的实现,直到找到最快的实现。

编辑:

要使用新数据完全回答问题:要遍历数据框并将其应用于每一列,您可以尝试以下代码:

df = pd.DataFrame.from_dict(data)
for (columnName, columnData) in df.iteritems():
   df[columnName] = list(map(remove_letters,  df[columnName])) # This is the same line from before. Only difference is that we are applying it to all columns.

【讨论】:

嗨,Roxy,感谢您的回复。这里慢意味着我必须重复相同的长代码: df=df.str.extract().astype(float) 30+ 次,因为我有 30+ 列有同样的问题。所以我正在寻找一种替代方法,通过使用简洁高效的代码来获得相同的结果。我试过你的,它更快,更易读。感谢您的解决方案! 太棒了!如果我理解正确,问题也不在于每列多次重复相同的代码。您可以查看这篇文章,了解如何使用 iteritems thispointer.com/… 迭代每一列 :) 请原谅我是 python 新手,我查看了网站并尝试将您的代码和 iteritems() 结合在一起,但仍然不太确定如何进行迭代。 别担心!我将通过一个有关如何执行此操作的示例来编辑答案。因为 cmets 中的代码格式不是很好。 嗨,Roxy,我现在终于解决了。我再次更新了问题。非常感谢您的支持!!

以上是关于如何从python中所有列的字符串中提取数字的主要内容,如果未能解决你的问题,请参考以下文章

python中如何从字符串中提取数字?

python从含有汉字和数字的字符串中提取数字部分

JavaScript中如何提取字符串?

R语言中如何提取字符串

python 提取字符串中的数字并且复制下来

python中如何提取单词的首字母