gpt4 book ai didi

python - 需要将按行组织的日期重新格式化为日期列,其中日期行之间的数据被分配适当的日期

转载 作者:行者123 更新时间:2023-12-01 00:55:48 25 4
gpt4 key购买 nike

我正在处理一些组织不良的数据,这些数据在第 1 行(Y、M、D)中记录日期,而接下来的 N 行按值(ID、value1、value2)组织

例如:

    column1  column2 column3
2018 10 2
ID01 a 1
ID02 b 4
ID03 c 2
2018 10 3
ID01 d 7
ID02 e 6
ID03 f 1

我想将日期行中的日期解析为日期时间格式 (2018-10-2),然后将它们移动到新列中。

我希望它看起来像:

    column1  column2  column3  date
ID01 a 1 2018-10-2
ID02 b 4 2018-10-2
ID03 c 2 2018-10-2
ID01 d 7 2018-10-3
ID02 e 6 2018-10-3
ID03 f 1 2018-10-3

我尝试的方法之一是从文件末尾向后工作,检测日期行(通过检查第 1 列是否包含年份)并将该行的数据帧拆分为一个以解析的日期时间命名的新文件格式。然后,在这个文件中,我可以读取文件名(已解析)并仅使用此数据创建一个新列。然后我会将所有文件组合在一起形成一个有凝聚力的数据集。

我遇到的问题是,我无法弄清楚如何告诉 pandas 向后工作并且仅在某一行进行拆分。我的一个想法是将最后一个日期的索引#写入一个变量,并将该行号处的数据帧拆分到一个新文件,但我不知道如何从底部迭代它。此外,我知道这种方法非常困惑,并且我确信有一种更有效的方法来实现这一点。

我所拥有的识别日期列和解析日期的内容:

years = [2015,2016,2017,2018]
df['year?'] = df['column1'].isin(years).astype(int) # Detect date row

if df['year?'] == 1: # I receive errors here
# Parse dates here
datedf = (df['column1'].astype(str))+(df['column2'].astype(str))+(df['column3'].astype(str))
df['date'] = pd.to_datetime(datedf, format='%Y%m%d') # Write date to 'date' column

最佳答案

我们可以分几个步骤解决这个问题:

  1. 首先我们提取日期行
  2. 我们从三列中创建一个日期:
  3. 我们将原始数据帧与新数据帧连接起来,并前向填充
  4. 我们删除日期行的行
df2 = df[df['column1'].str.match('(\d{4})')]

df2['date'] = pd.to_datetime(df2['column1'].astype(str) + df2['column2'].astype(str) + df2['column3'].astype(str), format='%Y%m%d')

df_final = pd.concat([df[~df['column1'].str.match('(\d{4})')], df2]).sort_index().ffill()

df_final = df_final[~df_final['column1'].str.match('(\d{4})')]
<小时/>
  column1 column2  column3       date
1 ID01 a 1 2018-10-02
2 ID02 b 4 2018-10-02
3 ID03 c 2 2018-10-02
5 ID01 d 7 2018-10-03
6 ID02 e 6 2018-10-03
7 ID03 f 1 2018-10-03

注意

我使用 column1column2column3 作为列名称

关于python - 需要将按行组织的日期重新格式化为日期列,其中日期行之间的数据被分配适当的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56261116/

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