我有几个csv文件标题为yyyymmdd:。我还有几个csv文件有' yyyymm'和一个有' yyyy'我不想要导入。
问题是,csv文件本身只有时间而不是日期:
这是我的代码:
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)
数据帧的索引返回正确的时间,但不是正确的日期。
所以我的问题是:我怎样才能拥有与csv filname相同的索引日期?
答案 0 :(得分:1)
您需要指定文件名的日期,而不是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,它具有日期时间索引:
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
错误消息指向问题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'))
在下面的评论中回答问题:
知道如何在不删除yyyymm和yyyy文件的情况下运行代码吗?
您可以按如下方式使用列表理解:
photolist = glob('*.csv')
photolist = [i for i in photolist if len(i) == 12]