gpt4 book ai didi

python - 如何从具有 HHMM、HMM、MM 和 M 格式的整数值的 pandas 列中有效提取小时和分钟?

转载 作者:行者123 更新时间:2023-12-01 08:28:55 24 4
gpt4 key购买 nike

我有一个 csv 文件,其中包含一列数据,其中每个值都是一个整数,表示一天中的小时和分钟。问题是每个值不遵循相同的格式。如果介于 12:00 AM 和 12:10 AM 之间,则该值将仅为一位数字,即分钟。如果时间介于 12:10 AM 和 1:00 AM 之间,则该值必须为数字,同样是分钟。如果介于 1:00 AM 和 10:00 AM 之间,则该值将包含三位数字,即小时和分钟。最后,对于所有其他值(上午 10:00 到 12:00 之间的值),该值将具有四位数字,同样是小时和分钟。

我尝试使用pandas的“to_datetime”函数对整个列进行操作。

from pandas import read_csv, to_datetime
url = lambda year: f'ftp://sidads.colorado.edu/pub/DATASETS/NOAA/G00807/IIP_{year}IcebergSeason.csv'
df = read_csv(url(2011))
def convert_float_column_to_int_column(df, *column_names):
for column_name in column_names:
try:
df[column_name] = df[column_name].astype(int)
except ValueError:
df = df.dropna(subset=[column_name]).reset_index(drop=True)
df[column_name] = df[column_name].astype(int)
return df
df2 = convert_float_column_to_int_column(df, 'ICEBERG_NUMBER', 'SIGHTING_TIME')
df2['SIGHTING_TIME'] = to_datetime(df2['SIGHTING_TIME'].astype(str), format='%H%M')

我得到的结果是:

ValueError: time data '0' does not match format '%H%M' (match). 

这符合预期。

我确信我可以通过迭代每一行、使用 if 语句并将每个值转换为四个字符的字符串来解决这个问题,但这些文件相对较大,因此解决方案速度太慢。

最佳答案

不需要 if 语句。 Series.str.zfill 将用正确数量的零填充它以使其采用正确的格式。然后使用 pd.to_datetime,减去 1900-01-01,这是当这些字段都不存在时将使用的日期:

输入数据

import pandas as pd
df = pd.DataFrame({'Time': [1, 12, 123, 1234]})
# Time
#0 1
#1 12
#2 123
#3 1234

pd.to_datetime

df['Time'] = (pd.to_datetime(df.Time.astype(str).str.zfill(4), format='%H%M') 
- pd.to_datetime('1900-01-01'))

#0 00:01:00
#1 00:12:00
#2 01:23:00
#3 12:34:00
#Name: Time, dtype: timedelta64[ns]

pd.to_timedelta

也可以使用,但由于您无法指定格式参数,因此您需要事先清理所有内容:

df['Time'] = df.Time.astype(str).str.zfill(4)

# Pandas .str methods are slow, use a list comprehension to speed it up
#df['Time'] = df.Time.str[0:2] + ':' + df.Time.str[2:4] + ':00'
csize=2
df['Time'] = [':'.join(x[i:i+csize] for i in range(0, len(x), csize))+':00' for x in df.Time.values]

df['Time'] = pd.to_timedelta(df.Time)

#0 00:01:00
#1 00:12:00
#2 01:23:00
#3 12:34:00
#Name: Time, dtype: timedelta64[ns]

关于python - 如何从具有 HHMM、HMM、MM 和 M 格式的整数值的 pandas 列中有效提取小时和分钟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54024179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com