Как сделать отдельную колонку с маркировкой дней недели - PullRequest
0 голосов
/ 24 июня 2019

У меня есть фрейм данных, отображающий item_number, amount_picked и date_expected, и я хотел бы добавить новый столбец и заполнить его автоматически днем ​​недели, соответствующим дате (большой набор данных, не может помечать отдельно).

Я пытался убедиться, что запрашиваемые данные представлены в формате даты, но я не уверен, что это происходит успешно.Это не обеспечивает ошибок, но все еще перечисляет столбец как «объект».Я также попытался использовать dataframe.dt.datetime и dataframe.dt.day_name, чтобы сделать это безрезультатно.

Я попытался выполнить это, запустив запрос обоими способами, показанными ниже:

SQL = ('SELECT item_number AS UPC, quantity_picked, date_expec AS date_expected FROM [Data] ORDER BY [date_expected] ASC')

SQL = ('SELECT item_number AS UPC, quantity_picked, CAST(date_expec AS date) AS date_expected FROM [Data] ORDER BY [date_expected] ASC')

Я попробовал каждую комбинациюдва выше и два ниже пытаются добавить новый столбец с днями недели к фрейму данных:

practice_df = pd.read_sql_query(SQL, con=sql_conn, parse_dates={'date_expected':'%Y%m%d'})
practice_df['day_of_week'] = practice_df['date_expected'].dt.day_name()
print(practice_df)
practice_df = pd.read_sql_query(SQL, con=sql_conn, parse_dates={'date_expected':'%Y%m%d'})
practice_df['date_num'] = practice_df.append(pd.to_datetime(practice_df['date_expected']))
practice_df['day_of_week'] = practice_df['date_expected'].dt.day_name()
print(practice_df)

В качестве еще одной попытки я сократил второй фрагмент кода на одну строку ввремя обнаружил удаление части parse_dates из строки, превращающей результаты запроса в кадр данных, а все остальные строки позволяли коду выполняться без ошибок.Затем я попробовал следующее ...

practice_df = pd.read_sql_query(SQL, con=sql_conn)
practice_df['date_num'] = practice_df.append(pd.to_datetime(practice_df['date_expected']))
practice_df['day_of_week'] = practice_df.append(practice_df['date_num'].dt.day_name())
print(practice_df)

Я попытался найти решение самостоятельно после исследования документации pd.read_sql_query и series.dt.datetime, а также поиска следующих опубликованных и отвеченных вопросов.для руководства:

Как parse_dates работает с pd.read_sql_query

Создание столбца дня недели в кадре данных Pandas с использованием Python

Когда при любом запросе параметров и втором параметре фрейма данных я получаю сообщение об ошибке

  File "...anaconda3\lib\site-packages\numpy\core\shape_base.py", line 283, in vstack
    return _nx.concatenate([atleast_2d(_m) for _m in tup], 0)

MemoryError

При использовании первого параметра при создании фрейма данных и добавлении нового столбца данные распечатываются как:

                 UPC  quantity_picked date_expected  day_of_week
0      0001111085148              1.0           NaT          NaN
1      0001111086984              1.0           NaT          NaN
2      0001111088636              1.0           NaT          NaN
3      0001111097045              1.0           NaT          NaN
4      0001450002690              1.0           NaT          NaN
5      0001600012479              1.0           NaT          NaN
6      0003800019891              1.0           NaT          NaN
7      0004450034115              1.0           NaT          NaN
8      0005100021165              1.0           NaT          NaN

Когда я пытался выполнить последний запрос к фрагменту данных, указанному как попытка выше, я получил следующую ошибку:

  File 
"...lib\site-packages\pandas\core\internals\managers.py", line 1325, in _make_na_block
    block_values = np.empty(block_shape, dtype=dtype)

MemoryError

Есть ли более простой способ, которым я должен идти об этом или что-то, что яотсутствует?Любое руководство с благодарностью.

1 Ответ

0 голосов
/ 24 июня 2019

Вы можете просто обработать это в SQL Server напрямую, используя DATENAME:

SELECT
    item_number AS UPC,
    quantity_picked,
    date_expec AS date_expected,
    DATENAME(dw, date_expec) AS day_of_week
FROM [Data]
ORDER BY [date_expected]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...