以日期形式作为索引的CSV文件名

2024-06-24 11:46:20 发布

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

我有几个csv文件的标题为yyyymmdd:'yyyymmdd'。我还有几个csv文件,其中有“yyyymm”,还有一个有“yyyy”,我不想导入。你知道吗

问题是,csv文件本身只有时间而没有日期:

datetimeformat。你知道吗

这是我的密码:

import pandas as pd
from glob import glob

photolist = glob('********.csv')

dataframes = [pd.read_csv(Tage, delimiter=';',
                    skiprows=2,
                    encoding='cp1252',
                    parse_dates = True,
                    index_col = 0) for Tage in photolist]


print(dataframes)

dataframes的索引返回正确的时间,但不返回正确的日期。你知道吗

所以我的问题是:我怎么能拥有和csv文件名相同的索引日期?你知道吗


Tags: 文件csvimport密码标题pandas时间glob
1条回答
网友
1楼 · 发布于 2024-06-24 11:46:20

您需要将日期指定为文件名,而不是pandas自动定义的日期。你知道吗

如何做到这一点:

import pandas as pd
from glob import glob

photolist = glob('*.csv')
def load_dataframe(path):
    df = pd.read_csv(path, delimiter=';',
                    skiprows=2,
                    encoding='cp1252',
                    parse_dates = True,
                    index_col = 0)

    df = df.set_index(pd.to_datetime(
             path.split(".")[0] +" " + df.index.to_series().dt.time.astype(str)))
    return df 

dataframes = [load_dataframe(Tage) for Tage in photolist]

说明:

与您的解决方案相比,唯一不同的是:

df.set_index(pd.to_datetime(
             path.split(".")[0] +" " + df.index.to_series().dt.time.astype(str)))

让我们用一个例子来解释:

给定一个数据帧df,它有一个datetime索引:

                     column
2017-08-12 08:00:00       1
2017-08-12 09:15:12       2
2017-08-12 10:45:23       3

我们可以将日期从2017-08-12更改为2019-10-11,如下所示:

df.set_index(pd.to_datetime(
    "20191011" + " "+ df.index.to_series().dt.time.astype(str))) 

输出:

                     column
2019-10-11 08:00:00       1
2019-10-11 09:15:12       2
2019-10-11 10:45:23       3

编辑:对OP错误的回答

错误消息指向问题ValueError: month must be in 1..12。你知道吗

因此,要么pd.to_datetime无法推断正确的日期格式,要么数据中的日期有误。假设您的数据是正确的,下面是如何显式指定日期格式:

df.set_index(pd.to_datetime(
             path.split(".")[0] +" " + df.index.to_series().dt.time.astype(str),
             format = '%Y%m%d %H:%M:%S'))

编辑2:

回答以下评论中的问题:

Any idea how to make the code run without having to delete the yyyymm and yyyy files?

您可以使用列表理解,如下所示:

photolist = glob('*.csv')
photolist = [i for i in photolist if len(i) == 12]

相关问题 更多 >