Найти записи DataFrame, где все столбцы имеют значение NaN - PullRequest
0 голосов
/ 31 января 2020

Я создаю фрейм данных, который содержит ежедневную информацию. Я хочу горячо кодировать дни для алгоритма машинного обучения, однако я не уверен, как найти записи, содержащие 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 для вторника и т. Д. c. Вот почему я спрашиваю, как найти только записи, которые имеют NaN в каждый из 7 дней, чтобы я мог установить только эти записи в True. Затем в самом конце установите все оставшиеся NaN на false.

transformData () - это длинный метод, но в нем записи записываются в фрейм данных, но было бы не слишком практично назначать эти значения там.

1 Ответ

0 голосов
/ 31 января 2020

Немного сложно расшифровать вашу цель из опубликованного кода, но если нет действительно веской причины делать этот процесс во время загрузки файлов, просто сделайте это один раз после загрузки файлов. Из вашего кода не похоже, что есть какие-либо преимущества памяти для выполнения обработки на лету.

Это то, что я использовал ранее для одного горячего кодирования даты в кадре данных, основанном на дне недели;

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...