pandas 读取不同日期格式的CSV文件作为索引

rdlzhqv9  于 2022-12-16  发布在  其他
关注(0)|答案(2)|浏览(166)

我有一系列的文件,其中的日期是在不同的格式,但其中一种格式最终没有被正确识别, Dataframe 将被连接,以生成只有一个,因此日期需要在相同的格式。基本上我阅读的文件是这样的:

for i in range(len(stations)):
   arq1 = pd.read_csv('./'+database_folder+'/'+group+'/'+stations[i]+".csv", index_col = 0)
   arq1.index=pd.to_datetime(arq1.index, format='%Y-%m-%d')
   arq1.index=pd.to_datetime(arq1.index, format='%Y%m%d')

groupstations它们只是用于访问归档的列表。
我在想:

try:  
   arq1.index=pd.to_datetime(arq1.index, format='%Y-%m-%d')
except:
   arq1.index=pd.to_datetime(arq1.index, format='%Y%m%d')

但我不知道这样行不行完全接受建议。
数据示例。 Dataframe 没有相同的日期范围:
一个二个一个一个

yrdbyhpb

yrdbyhpb1#

以下方法应该有效:

for i in range(len(stations)):
    arq1 = # ...
    arq1.index = arq1.index.map(str)
    fmt = '%Y-%m-%d' if '-' in arq1.index[0] else '%Y%m%d'
    arq1.index = pd.to_datetime(arq1.index, format=fmt)

    print(arq1.index) # just to check

基本上,强制索引为字符串而不是数字,然后检查值是否包含破折号(-)并选择适当的格式。
输出:

DatetimeIndex(['2004-04-01', '2004-04-02', '2004-04-03', '2004-04-04',
               '2004-04-05', '2004-04-06', '2004-04-07'],
              dtype='datetime64[ns]', name='Date', freq=None)
DatetimeIndex(['2012-01-01', '2012-01-02', '2012-01-03', '2012-01-04',
               '2012-01-05', '2012-01-06', '2012-01-07', '2012-01-08'],
              dtype='datetime64[ns]', name='TIMESTAMP', freq=None)
ilmyapht

ilmyapht2#

因为每个日期时间的标题不同:例如'Date''TIMESTAMP'
您可以按以下方式使用转换器

代码:

def date_converter(x):
    return pd.to_datetime(x, format='%Y-%m-%d')

def timestamp_converter(x):
    return pd.to_datetime(x, format='%Y%m%d')

for i in range(len(stations)):
    arq1 = pd.read_csv('./'+database_folder+'/'+group+'/'+stations[i]+".csv", index_col = 0, 
                 converters={'Date': date_converter, 'TIMESTAMP': timestamp_converter})
  • converters:提供一个字典,解释遇到特定标题时使用哪个转换器。使用的格式为:heading: converter,用于您需要的每个标题和转换器。例如,. 'Date': date_converter,请求对具有Date标题的列使用date_converter函数。

注:

如果需要,可以使用lambda函数:

for i in range(len(stations)):
    arq1 = pd.read_csv(stations[i]+".csv", index_col = 0, 
                 converters={'Date': lambda x: pd.to_datetime(x, format='%Y-%m-%d'), 'TIMESTAMP': lambda x: pd.to_datetime(x, format='%Y%m%d')})

相关问题