python - 我的数据清理脚本很慢,有什么改进的想法吗?

标签 python pandas dataframe data-science data-cleaning

我有一个数据(csv 格式),其中第一列是纪元时间戳(严格递增),其他列是累积行(仅递增或相等)。 示例如下:

df = pandas.DataFrame([[1515288240, 100, 50, 90, 70],[1515288241, 101, 60, 95, 75],[1515288242, 110, 70, 100, 80],[1515288239, 110, 70, 110, 85],[1515288241, 110, 75, 110, 85],[1515288243,110,70,110,85]],columns =['UNIX_TS','A','B','C','D'])
df =
id    UNIX_TS  A   B   C  D
 0 1515288240 100 50  90 70
 1 1515288241 101 60  95 75
 2 1515288242 110 70 100 80
 3 1515288239 110 70 110 85
 4 1515288241 110 75 110 85
 5 1515288243 110 70 110 85

import pandas as pd
def clean(df,column_name,equl):
    i=0
    while(df.shape[0]-2>=i):
        if df[column_name].iloc[i]>df[column_name].iloc[i+1]:
            df.drop(df[column_name].iloc[[i+1]].index,inplace=True)
            continue
        elif df[column_name].iloc[i]==df[column_name].iloc[i+1] and equl==1:
            df.drop(df[column_name].iloc[[i+1]].index,inplace=True)
            continue
        i+=1

clean(df,'UNIX_TS',1)
for col in df.columns[1:]:
    clean(df,col,0)

df =
    id    UNIX_TS  A   B   C  D
     0 1515288240 100 50  90 70
     1 1515288241 101 60  95 75
     2 1515288242 110 70 100 80

我的脚本按预期工作,但速度太慢,任何人都有关于如何提高其速度的想法。

我编写了一个脚本,根据两条规则删除所有无效数据:

  1. Unix_TS必须严格递增(因为它是一个时间,不能倒流或暂停),
  2. 其他列正在增加并且可以是恒定的,例如在一行中它是 100,而下一行它可以 >=100 但不能小于。

根据规则,索引 3 和 4 无效,因为 unix_ts 1515288239 是 1515288241 小于索引 2。 索引 5 是错误的,因为 B 值减少了

最佳答案

IIUC,可以使用

cols = ['A', 'B', 'C', 'D']
mask_1 = df['UNIX_TS'] > df['UNIX_TS'].cummax().shift().fillna(0)
mask_2 = mask_2 = (df[cols] >= df[cols].cummax().shift().fillna(0)).all(1)

df[mask_1 & mask_2]

输出

    UNIX_TS     A   B   C   D
0   1515288240  100 50  90  70
1   1515288241  101 60  95  75
2   1515288242  110 70  100 80

关于python - 我的数据清理脚本很慢,有什么改进的想法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52808839/

相关文章:

python - python 中用于电子邮件解析的正则表达式

python - 如何将 Python 字典插入 SQL Server 数据库表?

python - 通过 Python 计算两个字符串变量之间的公共(public)条目

Python dataframes - 如何在此处应用线程/多重处理来加快速度

dataframe - 如何制作良好的可重现 Apache Spark 示例

python - Python 中是否有 VLOOKUP 函数允许您根据原始表中的值从列中返回值?

r - 将矩阵转换为三列data.frame

python - 如何在 Mac OS X Mavericks 上安装 OpenERP?

python - 如何在 python xml.etree.ElementTree 中删除迭代器内的节点

python - 使用 Python Beautifulsoup 抓取 html 文本和图像链接