Python:将列转换为日期格式并提取ord

2024-05-14 16:48:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我请求帮助将值转换为日期格式。你知道吗

我有以下数据结构:

ID  ACT1        ACT2        ACT3        ACT4
1   154438.0    154104.0    155321.0    155321.0
2   154042.0    154073.0    154104.0    154104.0
...

ACT1-4列中的数字需要转换。某些行包含NaN值。你知道吗

我发现以下函数可以帮助我获得公历日期:

from datetime import datetime, timedelta
gregorian = datetime.strptime('1582/10/15', "%Y/%m/%d")
modified_date = gregorian + timedelta(days=154438)
datetime.strftime(modified_date, "%Y/%m/%d")

如果我知道如何将此转换应用于除“ID”之外的所有列,以及该方法是否正确(或者可以改进),那就太好了。你知道吗

应用转换后,我需要提取列项的顺序,按日期升序排序。例如

ID ORDER
1  ACT1, ACT3, ACT4, ACT2
2  ACT2, ACT1, ACT3, ACT4

谢谢你!你知道吗


Tags: id数据结构datetimedate格式数字nangregorian
2条回答

听起来你有两个问题。你知道吗

1)更改为日期时间:

cols = [col for col in df.columns if col != 'ID']
df.loc[:, cols] = df.loc[:, cols].applymap(lambda x: datetime.strptime('1582/10/15', "%Y/%m/%d") + timedelta(days=x) if np.isfinite(x) else x)

2)要获取已排序的列名:

df['ORDER'] = df.loc[:, cols].apply(lambda dr: ','.join(df.loc[:, cols].columns[dr.dropna().argsort()]), axis=1)

注意:上面的dropna将从order字符串中省略具有NaT值的列。你知道吗

首先,我将输入列用逗号分隔,以便更容易处理表单:

ID,ACT1,ACT2,ACT3,ACT4
1,154438.0,154104.0,155321.0,155321.0
2,154042.0,154073.0,154104.0,154104.0

然后可以使用CSV读取器读取每一行,提取以列名为键的键、值对。然后你从字典中弹出ID,得到它的值,比如1,2,等等,然后你可以根据日期的值重新排序。代码如下:

#!/usr/bin/env python3

import csv
from operator import itemgetter

idAndTuple = {}
with open('time.txt') as csvfile:
  reader = csv.DictReader(csvfile)
  for row in reader:
    myID = row.pop('ID',None)
    reorderedList = sorted(row.items(), key = itemgetter(1))
    idAndTuple[myID] = reorderedList
    print( myID, reorderedList )

运行时的结果是:

1 [('ACT2', '154104.0'), ('ACT1', '154438.0'), ('ACT3', '155321.0'), ('ACT4', '155321.0')]
2 [('ACT1', '154042.0'), ('ACT2', '154073.0'), ('ACT3', '154104.0'), ('ACT4', '154104.0')]

我想这就是你要找的。你知道吗

相关问题 更多 >

    热门问题