【问题标题】:How to split of many date in one dataframe如何在一个数据框中拆分多个日期
【发布时间】:2020-12-31 04:35:31
【问题描述】:

我正在处理 csv 格式的数据集。观察数为“22255”,变量(列)数为“35”。该数据集包括三个变量“founded_at”、“first_funding_at”和“last_funding_at”,包含日期。

这是数据集的示例:

founded_at      first_funding_at    last_funding_at
12/1/2005          5/3/2011            5/3/2011
1/1/2007           8/1/2007            3/8/2008
7/1/2007           3/1/2008            3/1/2009
9/1/2007           10/1/2009           8/1/2010
4/2/2009           1/1/2009            6/27/2014
1/1/2010           11/6/2013           11/6/2013

我想将所有这些日期拆分为“年”、“周”、“日”、“季度”、“星期几”、“星期几”、“日名”和“周末”。我试图通过下面的代码来做到这一点,但它不起作用。我在 pandas._libs.hashtable.PyObjectHashTable.get_item 中收到此错误“文件“pandas_libs\hashtable_class_helper.pxi”,第 1627 行 KeyError: '壮举'"

#Import packeges
import pandas as pd
# Read the dataset
df = pd.read_csv("Sales dataset - Vijay.csv", engine='python', parse_dates['founded_at','first_funding_at','last_funding_at'])

list1 = ["founded_at", "first_funding_at","last_funding_at"]

for feat in list1:
    #print (feat)
    df['Year'] = df[feat].dt.year
    df['Week'] = df[feat].dt.week
    df['Day'] =  df[feat].dt.day
    df['quarter'] = df['feat'].dt.quarter
    df['week_of_day'] = df['feat'].dt.dayofweek
    df['year_of_week'] = df['feat'].dt.weekofyear
    df['dayofweek_name'] = df['feat'].dt.day_name()
    df['weekend'] = np.where(df['feat'].isin(['Sunday','Saturday']),1,0)

我真的需要你的帮助来解决这个错误。

【问题讨论】:

  • 数据集中是否有名为feat的列?或者你有一个名为feat 的变量。您的代码正在尝试两种方式。
  • 不,数据集只包含这些变量:founded_at、first_funding_at 和 last_funding_at
  • 你能告诉我我的代码有什么错误吗?
  • 您使用的是字符串'feat',而不是变量feat
  • 另外你正在覆盖列你应该使用类似YEAR_FOUDNED,YEAR_FIRST_COUNDED等的东西。

标签: python-3.x pandas csv date split


【解决方案1】:

根据代码和错误,您使用的是字符串而不是循环变量:

for feat in list1:
    #print (feat)
    df['Year'] = df[feat].dt.year  # feat variable - correct
    df['Week'] = df[feat].dt.week
    df['Day'] =  df[feat].dt.day
    df['quarter'] = df['feat'].dt.quarter   # 'feat' string - wrong
    df['week_of_day'] = df['feat'].dt.dayofweek
    df['year_of_week'] = df['feat'].dt.weekofyear
    df['dayofweek_name'] = df['feat'].dt.day_name()
    df['weekend'] = np.where(df['feat'].isin(['Sunday','Saturday']),1,0)

看起来您正在覆盖循环中的相同列。

完整的工作代码:

ss = '''
founded_at      first_funding_at    last_funding_at
12/1/2005          5/3/2011            5/3/2011
1/1/2007           8/1/2007            3/8/2008
7/1/2007           3/1/2008            3/1/2009
9/1/2007           10/1/2009           8/1/2010
4/2/2009           1/1/2009            6/27/2014
1/1/2010           11/6/2013           11/6/2013
'''.strip()

with open('data.csv','w') as f: f.write(ss)  # write test file

############### main script ################

import pandas as pd
import numpy as np
# Read the dataset
df = pd.read_csv("data.csv", engine='python', parse_dates=True, delim_whitespace=True)

list1 = ["founded_at", "first_funding_at","last_funding_at"]

for feat in list1:
    df[feat] = pd.to_datetime(df[feat])
    #print (feat)
    df[feat + '_' + 'Year'] = df[feat].dt.year
    df[feat + '_' + 'Week'] = df[feat].dt.week
    df[feat + '_' + 'Day'] =  df[feat].dt.day
    df[feat + '_' + 'quarter'] = df[feat].dt.quarter
    df[feat + '_' + 'week_of_day'] = df[feat].dt.dayofweek
    df[feat + '_' + 'year_of_week'] = df[feat].dt.weekofyear
    df[feat + '_' + 'dayofweek_name'] = df[feat].dt.day_name()
    df[feat + '_' + 'weekend'] = np.where(df[feat].dt.day_name().isin(['Sunday','Saturday']),1,0)
    
print(df)

【讨论】:

  • 当我使用变量专长时,我得到了这个错误“文件”pandas_libs\tslibs\np_datetime.pyx”,第 117 行,在 pandas._libs.tslibs.np_datetime.check_dts_bounds pandas._libs.tslibs.np_datetime .OutOfBoundsDatetime:越界纳秒时间戳:1-01-07 00:00:00"
  • 我在 pandas._libs.tslibs.np_datetime.check_dts_bounds pandas._libs.tslibs.np_datetime.OutOfBoundsDatetime: OutOfBoundsDatetime 中得到同样的错误“文件”pandas_libs\tslibs\np_datetime.pyx”,第 117 行bounds 纳秒时间戳:1-01-07 00:00:00"
  • 在我删除 "df[feat + '_' + 'weekend'] = np.where(df[feat].isin(['Sunday','Saturday']),1,0 )".. 效果很好。我不知道为什么它不适用于此行代码
  • 答案已更新。使用...np.where(df[feat].dt.day_name().isin(['....']),1,0)
猜你喜欢
  • 2016-06-24
  • 2013-05-27
  • 2016-09-28
  • 1970-01-01
  • 2020-10-24
  • 2021-03-27
  • 2021-10-04
  • 2018-02-24
  • 2023-04-09
相关资源
最近更新 更多