gpt4 book ai didi

python - 如何对日期时间索引数据框进行排序

转载 作者:行者123 更新时间:2023-12-04 03:33:55 24 4
gpt4 key购买 nike

我有一个日期时间索引数据框,其中包含 2019 年到 2020 年之间每小时的数据,我按如下方式从 CSV 文件导入,以便只保留我想要的列,名称更简单(名称因工作原因而更改) :

file = 'data.csv'
df = pd.read_csv(file,sep=";", header=0, na_values=['NA', ' ' , '.'])
df['datetime']=pd.to_datetime(df['datetime'])
df['week'] = df['datetime'].dt.isocalendar().week
df['month'] = df['datetime'].dt.month
df['hour']=df['datetime'].dt.hour
df['day']=df['datetime'].dt.day

df=df.set_index(['datetime'])


df=df.rename(columns={'data1':'d1','data2':'d2','data3':'d3','data4':'d4','data5':'d5','data6':'d6','data7':'d7','data8':'d8','data9':'d9','data10':'d10','data11':'d11','data12':'d12','data13':'d13','data14':'d14','data15':'d15','data16':'d16'})

df=df[['d1','d2','d3','d4','d5','d6','d7','d8','d9','d10','d11','d12','d13','d14','d15','d16','week','month','hour','day']]

当我打字时:

df['d4'][0:2800].min()

答案是 995,我知道这是一个很好的答案,因为我查看了 CSV 文件。

现在我的问题是,在导入过程中,一些日期以错误的顺序放入数据框中。我不知道为什么,但是例如 2019-09-09 后面会跟着 2019-09-13 而不是 2019-09-10 。

我试图通过使用来修复它

df=df.sort_index(ascending=True)

df=df.sort_index()

它似乎工作正常,因为现在所有日期都井井有条,但现在我输入了

df['d4'][0:2800].min()

现在答案是 870,这是一个错误的值。

似乎 df.sort_index() 正在混合我的数据,我做错了什么吗?

最佳答案

这里的重点是确保日期/时间正确导入到日期时间数据类型。像 '01/01/2019 00:00' 这样的字符串默认会被解析为 mm/dd/YYYY HH:MM,参见 pandas.to_datetime :

dayfirst bool, default False

根据您居住的地方,您可能希望这一天先到来。

另请注意,这是针对每个元素进行评估的;例如'25-12-2019' 被解析为 12 月 25 日,因为没有月份 25。但是来自同一列的 '03-12-2019' 变成了 3 月 12 日,尽管 Dec第三可能是预期的。这会造成相当大的困惑。所以如果...

日期在您的日期字符串中排在第一位:

df['datetime'] = pd.to_datetime(df['datetime'], dayfirst=True)

你也可以

  • 提供 parsing directive明确地通过 to_datetime
  • format kwarg
  • 通过 pandas.read_csvparse_dates 关键字指定要解析为日期时间的列.在那里,您还可以指定 dayfirst=True

关于python - 如何对日期时间索引数据框进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67319606/

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