【问题标题】:Optimizing code pandas dataframe extracting subvalue优化代码熊猫数据框提取子值
【发布时间】:2021-05-19 19:57:50
【问题描述】:

我需要用一个大数据集优化这个需要几十秒的代码部分。

        if ((isnan(data["x"][i]))==False):
            data["Visibility"][i]=int(data["Visibility"][i][0:2]) # Extract the first two numbers 
        else:
            data["x"][i]=1000 # Replace null values with 1000 

编辑:对于我的数据集,我有字符串列值,我想用相同值的子集替换它们

这是一个例子:

"01 : visibilité Horizo​​ntale 0.1km" --> 01

"02 : visibilité Horizo​​ntale 0.2km" --> 02

"03 : visibilité Horizo​​ntale 0.3km" --> 03

...

【问题讨论】:

  • 你能多展示一点吗?此外,看起来您正在迭代数据框。这非常慢,而且很少(如果有的话)解决方案。
  • 如果您只想替换数据框中的 NaN 或缺失值,请查看 fillna function,它应该比遍历数据框更有效
  • 请将您的数据的 small 子集作为可用于测试的可复制 代码片段以及您对提供数据。请参阅 MRE - Minimal, Reproducible, ExampleHow to make good reproducible pandas examples
  • 附注 - 无需在 if 语句中与 TrueFalse 进行比较。你可以(并且应该)做类似if not isnan(data["x"][i])):
  • 我对我的问题做了一些澄清..

标签: python pandas


【解决方案1】:

让你慢下来的是数据帧上的 for 循环,而不是使用内置函数。

没有 FOR 循环:

data.loc[~isnan(data["x"]), "Visibility"] = data.loc[~isnan(data["x"]), "Visibility"].str[:2]
data.loc[isnan(data["x"]), "Visibility"] = 1000

reference


以上代码未经测试,因为您没有提供可重现的示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    相关资源
    最近更新 更多