【问题标题】:How to assign a value to a column in Dask data frame如何为 Dask 数据框中的列分配值
【发布时间】:2021-09-09 06:30:53
【问题描述】:

如何对 dask 数据帧执行与下面的代码相同的操作。

df['new_column'] = 0
for i in range(len(df)):
    if (condition):
        df[i,'new_column'] = '1'
    else:
        df[i,'new_column'] = '0'

我想向 dask 数据框添加一个新列并将 0/1 插入新列。

【问题讨论】:

    标签: python insert append dask


    【解决方案1】:

    如果您不希望按照 Rajnish kumar 的建议进行计算,您也可以使用以下几行:

    import dask.dataframe as dd
    import pandas as pd
    import numpy as np
    
    my_df = [{"a": 1, "b": 2}, {"a": 2, "b": 3}]
    df = pd.DataFrame(my_df)
    dask_df = dd.from_pandas(df, npartitions=2)
    dask_df["c"] = dask_df.apply(lambda x: x["a"] < 2, 
                                 axis=1, 
                                 meta=pd.Series(name="c", dtype=np.bool))
    dask_df.compute()
    

    输出:

        a   b   c
    0   1   2   True
    1   2   3   False
    

    条件(这里检查是否在列"a" &lt; 2 中的条目)逐行应用。请注意,根据您的条件和其中的依赖关系,它可能不一定那么简单,但在这种情况下,您可以分享有关您的条件需要什么的额外信息。

    【讨论】:

    • 确实我必须使用 dask 数据框。条件如下:随机,新列值中的0.2个应该是1,其他的值应该是0。
    • @Fatemeh:假设您的 dask DataFrame 中有 5 个大小相同的分区,如果每个分区包含 0.2 1s 的一小部分会很好,或者该条件是否也涵盖单个分区的情况包含比其他更多的1?应该有 20% 的 1 是预期的还是正好是 20%?
    • 其实我不确定我是否也理解你的问题。所以我更多地解释了我的问题。我试图将 dask 数据帧拆分为 train_test(以便将其应用于自动编码器),但“dask_ml.model_selection.train_test_split()”会杀死内核。所以我想使用 0/1 列,0 显示训练数据,1 显示测试值。
    【解决方案2】:

    您不能直接对 Dask Dataframe 执行此操作。您首先需要计算它。使用这个,它会工作的。

    df = df.compute()
    for i in range(len(df)):
    if (condition):
        df[i,'new_column'] = '1'
    else:
        df[i,'new_column'] = '0'
    

    这背后的原因是Dask Dataframe是dataframe schema的表示,它分为dask-delayed task。希望对你有帮助。

    【讨论】:

    • 由于 RAM 问题,我需要坚持使用 Dask 数据帧。关于如何将值插入到 dask 数据框中的任何建议?
    • See this Stack Overflow question。这里有理由回答
    【解决方案3】:

    我正在通过这些答案来解决我面临的类似问题。

    这对我有用。

    def extractAndFill(df, datetimeColumnName):
      # Add 4 new columns for weekday, hour, month and year
      df['pickup_date_weekday'] = 0 
      df['pickup_date_hour'] = 0
      df['pickup_date_month'] = 0
      df['pickup_date_year'] = 0
    
      # Iterate through each row and update the values for weekday, hour, month and year
      for index, row in df.iterrows():
        # Get weekday, hour, month and year
        w, h, m, y = extractDateParts(row[datetimeColumnName])
    
        # Update the values
        row['pickup_date_weekday'] = w
        row['pickup_date_hour'] = h
        row['pickup_date_month'] = m
        row['pickup_date_year'] = y
    
      return df
    
    df1.compute()
    df1 = extractAndFill(df1, 'pickup_datetime')
    

    【讨论】:

      猜你喜欢
      • 2019-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-21
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      • 1970-01-01
      相关资源
      最近更新 更多