【问题标题】:Find DataFrame entries where certain columns are all NaN查找某些列都是 NaN 的 DataFrame 条目
【发布时间】:2020-02-01 02:02:24
【问题描述】:

我正在构建一个包含日常信息的数据框。我想对机器学习算法的日子进行一次热编码,但是我不确定如何找到每天包含 NaN 的整体并将该天的所有条目设置为 True 。然后在最后,将所有剩余的 NaN 值设置为 False。

print("Starting to process files...")
#Init dataframe
df= pd.DataFrame(columns=["start", "close", "state", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"])
#Define days
weekdays = ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"]
#Then for each day of the week, creep through all the files and append entries to dataframe
for day in weekdays:
    files = getFilesFromDir("datastream/"+day+"/")
    print("Processing " + day)
    for file in files:
        print("Processing...")
        content = readCSV(file)
        df = transformData(df, content)
        print("File finished.")
        print(df.size)
        break
    #Done with this day, assign one-hot encoded value to its column and proceed to next day
    df[day] = True

当前解决方案的问题是,一旦星期二完成,所有星期一条目也将在星期二被分配 True 等。这就是为什么我要问如何只找到在 7 个中的每个条目中都有 NaN 的条目天,所以我只能将这些条目设置为 True。然后在最后将所有剩余的 NaN 设置为 false。

transformData() 是一个长方法,但这就是将条目写入数据帧的地方,但在那里也分配这些值不太实用。

【问题讨论】:

    标签: python pandas numpy


    【解决方案1】:

    从发布的代码中解读您的目标有点困难,但除非有充分的理由在您加载文件时执行此过程,否则只需在加载文件后执行一次即可。从您的代码来看,动态处理似乎没有任何内存优势。

    这是我之前在基于工作日的数据框中对日期时间进行热编码的方法;

    df['weekday_name'] = df['my_datetime_column'].dt.strftime('%A')
    df = pd.concat([df, pd.get_dummies(df['weekday_name'])], axis=1).drop(['weekday_name', 'index'], axis=1)
    

    【讨论】:

    • 我有很多(很多!)数据行(每个文件大约 18k 行,每天大约 20 个文件),所以我不想在数据集然后转换为单热编码(因此我没有发布数据帧的 sn-p,仅通过一个片段很难理解)
    • 嗨@peterxz,我通常在超过 1m 行的数据帧上执行此操作,因此 360k 行应该没有问题。
    • 您可以在没有中间步骤的情况下执行此操作 - df = pd.concat([df, pd.get_dummies(df.my_datetime_column.dt.strftime("%A"))], axis=1), axis=1),附加步骤更清楚。试一试,看看它是否在优化之前摔倒了:)
    猜你喜欢
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 2017-09-15
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 2018-06-30
    相关资源
    最近更新 更多