将第一个日期类型移动到特定列-Pandas

xuo3flqw  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(155)

我有一个Pandas Dataframe ,从csv文件中加载,结构也是如此:

谁创建的csv犯了同样的错误,我需要移动的第一个日期出现在每个原始,列“Opening Date”.最终结果应该是:

如果不指定从哪个列提取日期,我怎么做呢?(我唯一的信息是它是“Opening date”列之后的第一个)。

jaql4c8m

jaql4c8m1#

我想了一个非常解释性的方法。
首先,我们需要一个能够识别日期类型的函数。我不知道你的csv文件中是否有特定的格式,所以如果有疑问,我们将使用一个能够识别任何模式的函数。
checkout 'Check if string has date, any format':

from dateutil.parser import parse

def is_date(string, fuzzy=False):
    try: 
        parse(string, fuzzy=fuzzy)
        return True

    except ValueError:
        return False

此时,我们可以对 Dataframe 中的每一行进行迭代,如果右列中没有值,我们将搜索所有下一列。

sub_df = df.iloc[:, df.columns.str.find("Opening Data").argmax()+1:]  # retrieve only remaining columns

for index, row in df.iterrows():
    if not row['Opening Data']:
        for col in sub_df.columns:
            if is_date(row[col]):
                df.iloc[index]['Opening Data'] = row[col]
                df.iloc[index][col] = ''

从以下形式的数据集开始:
| | 期初数据|列_0|列_1|
| - -|- -|- -|- -|
| 第0页|2000年1月1日上午10时00分|||
| 一个||2000年2月1日上午10时00分||
| 2个|||2000年1月3日上午10时00分|
输出将是:
| | 期初数据|列_0|列_1|
| - -|- -|- -|- -|
| 第0页|2000年1月1日上午10时00分|||
| 一个|2000年2月1日上午10时00分|||
| 2个|2000年1月3日上午10时00分|||

相关问题