【问题标题】:check a large file .csv and replace, and classify it in one column检查一个大文件 .csv 并替换,并将其分类在一列中
【发布时间】: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 ?此列是否有跳过值或没有连续值?这就是你想重新分类的原因吗?
  • 另外,我建议你通过stackoverflow.com/help/how-to-ask。它将帮助您编写包含必要细节的精美、简洁的问题。

标签: python pandas dictionary data-mining


【解决方案1】:

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

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

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

  3. 根据您的代码,我还假设您不允许使用 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 的标签编码器将为您完成任务
猜你喜欢
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 1970-01-01
  • 2018-03-30
  • 2021-05-20
  • 2019-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多