Python Pandas数据框架操作(Excel文件)

pdsfdshx  于 2022-11-26  发布在  Python
关注(0)|答案(1)|浏览(170)

我是Python新手,在使用EXCEL进行 Dataframe 操作时遇到了一个问题:
下面是Excel的一个片段:

我能够删除datetime行的重复项,得到一个只包含datetime行的 Dataframe 和另一个只包含描述的 Dataframe ;
我还可以删除最后一行:

我想做的是将带有日期的A列“移位”到上面一行的B列。
如果两个 Dataframe 都是1-1,这很容易,但我有一行(黄色),没有任何日期时间以下。
有人知道怎么做吗?
变成这样
第一个

kmbjn2e3

kmbjn2e31#

下面是一个使用标准pandas frame's函数的命题:

import pandas as pd
import numpy as np

def flag_delete(df):
    df.insert(0, "temp_col",  df.groupby("Col_A")["Col_A"].transform("count"))
    df.loc[df.pop("temp_col").eq(1), df.columns!="Col_A"] = "DELETE"
    return df

def format_dates(df):
    temp_df = df.select_dtypes('datetime64')
    df[temp_df.columns] = temp_df.apply(lambda x: x.dt.strftime('%d-%b-%Y'))
    return df

df= (
        pd.read_excel("BrunoA.xlsx", header=None, dtype=str)
            .assign(Col_A= lambda x: pd.Series(np.where(~x[0].str.contains("\d{4}-\d{2}-\d{2}", regex=True), x[0], np.NaN)).ffill(),
                    Col_B= lambda x: np.where(x[0].str.contains("\d{4}-\d{2}-\d{2}", regex=True), x[0], np.NaN))
            .drop(columns=0)
            .drop_duplicates()
            .apply(lambda _: pd.to_datetime(_, format='%Y-%m-%d', errors="ignore"))
            .pipe(format_dates)
            .pipe(flag_delete)
            .dropna()
            .rename(columns={"Col_A": -1, "Col_B": 0})
            .sort_index(axis=1)
            .reset_index(drop=True)
     )

display(df)
#输出:

相关问题