Строки не фильтруются при записи в файл CSV - PullRequest
0 голосов
/ 30 августа 2018

Этот код используется для поиска поздних поставок за определенный промежуток времени (в этом примере - 2018 год) и для записи данных в файл csv (otdedit.csv). Однако, хотя данные фильтруются правильно по годам, значения, которые не являются поздними, не фильтруются. Мой вопрос заключается в том, как отфильтровать строки, которые имеют только поздние доставки, для записи в CSV-файл otdedit.csv.

import pandas as pd
from datetime import datetime
from datetime import timedelta


PURCHASE_ORDER = 'Material'
DELIVERY_DATE = 'Delivery Date'
DESIRED_DATE = 'Desired Delivery'
DELAYED_DAYS = 'Delayed Days'

df = pd.read_csv('otd.csv', index_col=PURCHASE_ORDER)

df[DELIVERY_DATE] = pd.to_datetime(df[DELIVERY_DATE])
df[DESIRED_DATE] = pd.to_datetime(df[DESIRED_DATE])
df[DELAYED_DAYS] = df[DELIVERY_DATE] - df[DESIRED_DATE]
late_threshold = pd.Timedelta(days=0)
late_deliveries = df[DELAYED_DAYS] > late_threshold
df[late_deliveries].drop([DELIVERY_DATE, DESIRED_DATE], axis=1)



df['Delivery Date'] = pd.to_datetime(df['Delivery Date'], format='%m/%d/%Y')
df['Desired Delivery'] = pd.to_datetime(df['Desired Delivery'], format='%m/%d/%Y')

df2 = df[(df['Delivery Date'].dt.year >= 2018) & (df['Delivery Date'].dt.year <= 2018)]
df2['Diff Deliv Date'] = df2['Delivery Date'] - df2['Desired Delivery']




df2.to_csv('otdedit.csv', sep=',')

Вот снимок файла otdedit.csv, обратите внимание, что строки с 0 задержанными днями по-прежнему отображаются.

enter image description here

(Также в качестве примечания, я не знаю, почему эта программа тоже не фильтрует по заголовкам, я только хочу, чтобы эти 4 столбца отображались, но каждый столбец из исходного файла отображается (я скрыл столбцы для снимок)

Также вот пример данных, если необходимо:

Material    Delivery Date   Desired Delivery    Delayed Days    Diff Deliv Date
20030650    1/3/2018    12/22/2017  12 days 00:00:00.000    12 days 00:00:00.00000
20056352    1/2/2018    12/31/2017  2 days 00:00:00.00000   2 days 00:00:00.000000
20052196    10/18/2018  10/18/2018  0 days 00:00:00.0000    0 days 00:00:00.0000000
20031687    1/3/2018    12/27/2017  7 days 00:00:00.0000    7 days 00:00:00.000000
20031687    2/3/2018    2/3/2018    0 days 00:00:00.00000   0 days 00:00:00.000000
20056053    5/14/2018   3/11/2017   429 days 00:00:00.00    429 days 00:00:00.0000000
20070547    1/2/2018    8/15/2017   140 days 00:00:00.0000  140 days 00:00:00.00

1 Ответ

0 голосов
/ 30 августа 2018

Линия

df[late_deliveries].drop([DELIVERY_DATE, DESIRED_DATE], axis=1)

Создает копию представления в исходном кадре данных с отброшенными столбцами, однако вы никому не назначаете эту копию. Исходный кадр данных df не изменился.

Что вы можете сделать после создания df2:

df2 = df2[df2[DELAYED_DAYS] > late_threshold]
df2.drop([DELIVERY_DATE, DESIRED_DATE], axis=1, inplace=True)
...