检查一个大文件 .csv 并替换,并将其分类在一列中

Posted

技术标签:

【中文标题】检查一个大文件 .csv 并替换,并将其分类在一列中【英文标题】:check a large file .csv and replace, and classify it in one column 【发布时间】:2020-04-16 19:39:33 【问题描述】:

我需要检查一个大文件 .csv 并替换,并将其分类在一列dataframe['value']

这是我的代码,但运行缓慢:

def encoder():
    classes=
    a=dataframe['value']
    c=-1
    for i in a:
        if i not in classes:
            print(i)
            c=c+1
            classes[i]=c
    for i in range(len(a)):
        print(i)
        dataframe['value'][i]=classes[a[i]]

有没有更好的解决方案?

这是我的数据集的一部分:

subject_id  hadm_id seq_num icd9_code   icustay_id  value   valueuom
18557   183341  4   42731   228376.0    Tracheostomy    0
18557   178725  4   42731   228376.0    Tracheostomy    0
18557   173656  5   42731   228376.0    Tracheostomy    0
18557   138883  10  42731   228376.0    Tracheostomy    0
18557   183341  4   42731   228376.0    30  0
18557   178725  4   42731   228376.0    30  0
18557   173656  5   42731   228376.0    30  0
18557   138883  10  42731   228376.0    30  0
18557   183341  4   42731   228376.0    2 Person Assist 0
18557   178725  4   42731   228376.0    2 Person Assist 0
18557   173656  5   42731   228376.0    2 Person Assist 0
18557   138883  10  42731   228376.0    2 Person Assist 0
18557   183341  4   42731   228376.0    Calm    0
18557   178725  4   42731   228376.0    Calm    0
18557   173656  5   42731   228376.0    Calm    0
18557   138883  10  42731   228376.0    Calm    0
18557   183341  4   42731   228376.0    Present 0
18557   178725  4   42731   228376.0    Present 0
18557   173656  5   42731   228376.0    Present 0
18557   138883  10  42731   228376.0    Present 0

【问题讨论】:

分类是什么意思?如果要提取列中的所有不同值,请使用 df['column'].drop_duplicates() 从您所做的事情来看,您可以为类创建字典并应用 MAP。此外,如果您只想为整列设置一个值,则可以执行 df['value'] = 0 您能否为您的数据添加更多详细信息,特别是 value 列?它是否还包含空值,或者它只是 0 ?此列是否有跳过值或没有连续值?这就是你想重新分类的原因吗? 另外,我建议你通过***.com/help/how-to-ask。它将帮助您编写包含必要细节的精美、简洁的问题。 【参考方案1】:

我从您的代码中做出的一些假设,如果我错了,请告诉我。

    任务是对数据框中value列的值进行编码。

    我假设 value 列没有任何空值并且只有数字。

    根据您的代码,我还假设您不允许使用 sklearn 之类的库或任何其他方式来执行此操作。

在这些假设下,下面的代码可能会对您有所帮助。

x = sorted(dataframe["value"].unique())
y = list(range(0, len(x)))

encoded_dict = dict(zip(x, y))
dataframe["value"] = dataframe["value"].apply(lambda x: encoded_dict[x])

【讨论】:

1.是的,任务是对列值中的值进行编码。 2. 不,列由不同的类型(str、int、floats 等)和空值组成。 3.我尝试使用Ordinalencoder,但是报错了。 那么在这种情况下,使用 sklearn 的标签编码器将为您完成任务

以上是关于检查一个大文件 .csv 并替换,并将其分类在一列中的主要内容,如果未能解决你的问题,请参考以下文章

如何在一列字符串中找到特定的数字模式并将该值替换为该序数的文本版本?

如何在python中读取一个大的tsv文件并将其转换为csv

在一列中对具有相同数据的行进行分组,并将其相关数据汇总在另一列中 [ORACLE SQL]

如何从 UINavigationController 弹出视图并在一次操作中将其替换为另一个视图?

如何将查找和替换限制为仅 CSV 中的一列?

用变量替换第一列csv