【问题标题】:How To Create New Column in Pandas Using Date/Time Information From Other Columns如何使用来自其他列的日期/时间信息在 Pandas 中创建新列
【发布时间】:2020-08-08 03:44:29
【问题描述】:

我有一个数据集,其中年/月/日/小时/分钟/秒数据存储在不同的列中:

Day,Date,Month,Year,Hour,Min,Sec,Wind dir,WS (m/s),Press (hPa),RH (%),T(C),Td(C),SR (W/m2)
Thu,11,April,2019,16,23,27,31,1.28,993.4,38,7,-6.1,470
Thu,11,April,2019,16,24,27,103,1.21,993.5,39,7,-5.9,515

我已将其从 csv 文件导入到 Pandas 数据框中:

df = pd.read_csv('/Users/jacks/Downloads/Cornell/SP20/Instrumentation/Lab 5/EAS2500_MetPak11_18April2019.csv', engine='python')

我想在此数据框中创建一个新列,以日期时间格式存储日期/时间数据。我已经使用以下代码进行了尝试:

df["Date_Time"] = datetime(df["Year"],df["Month"],df["Day"],df["Hour"],df["Min"],df["Sec"])

但我收到以下错误:

raise TypeError(f"cannot convert the series to {converter}")
TypeError: cannot convert the series to <class 'int'>

为什么这不起作用,我将如何完成这项任务?

【问题讨论】:

  • 我猜月份很麻烦,Pandas 期待数字
  • @Alex 这似乎是合理的,尽管我想我记得 datetime 支持对月份/星期几的引用?有没有办法我可以通过并系统地将“月份”列中的每个“四月”实例替换为 4?

标签: python pandas datetime


【解决方案1】:

用途:

df_time = df[["Year", "Month", "Date", "Hour", "Min", "Sec"]].astype(str).agg("".join, axis=1)
df["Date_Time"] = pd.to_datetime(df_time, format="%Y%B%d%H%M%S")

print(df["Date_Time"])

打印出来:

0   2019-04-11 16:23:27
1   2019-04-11 16:24:27
Name: Date_Time, dtype: datetime64[ns]

【讨论】:

    【解决方案2】:

    在评论中回答问题:如何将月份名称转换为数字。

    示例如下:

    df = pd.DataFrame(["Apr","May"], columns=["Month"])
    mnth_to_num = {"Apr":4,"May":5}
    df["Month_Num"] = df["Month"].apply(lambda x: mnth_to_num[x])
    

    【讨论】:

    • 这成功地创建了一个包含相关月份数字的新列。谢谢!但即使我在 datetime 函数中引用 Month_Num,我的原始版本也无法将系列转换为 错误
    【解决方案3】:

    试试这个:

     df["datetime"] = df[["Year","Month","Date","Hour","Min","Sec"]].astype(str).agg('-'.join, axis=1)
     df["datetime"] = pd.to_datetime(df["datetime"],format="%Y-%B-%d-%H-%M-%S")
    

    【讨论】:

    • 哦,我看到 Shubham 打败了我
    猜你喜欢
    • 1970-01-01
    • 2015-02-21
    • 2020-08-21
    • 2019-04-02
    • 2021-05-12
    • 2021-01-30
    • 2021-03-25
    • 1970-01-01
    • 2016-11-04
    相关资源
    最近更新 更多