【问题标题】:How to make a separate column labeling days of week如何制作单独的列标记星期几
【发布时间】:2019-06-24 14:17:42
【问题描述】:

我有一个显示 item_number、quantity_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 文档后,我尝试自己提出一个解决方案,并查看以下发布和回答的问题以获得指导:

How does parse_dates work with pd.read_sql_query

Create a day-of-week column in a Pandas dataframe using 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

有没有更简单的方法可以解决这个问题或我缺少的东西?非常感谢任何指导。

【问题讨论】:

    标签: python sql-server pandas dataframe datetime


    【解决方案1】:

    你可以直接在 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]
    

    【讨论】:

      猜你喜欢
      • 2014-09-22
      • 2021-08-07
      • 1970-01-01
      • 2013-12-31
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      • 2016-01-19
      • 2020-10-18
      相关资源
      最近更新 更多