如何将日期信息追加到read_csv上的时间列



我有一个以下格式的CSV文件

00:05:00;300;3;0;0;0;0;0;0;0;0;0;0;18.1;3.8;2.3
00:05:00;300;7;0;0;0;0;0;0;0;0;0;0;16.7;3.8;2.3
00:05:00;300;1;0;0;0;0;0;0;0;0;0;0;17.387;3.8;2.3
00:05:00;300;2;0;0;0;0;0;0;0;0;0;0;16.2;3.8;2.3

我通过以下方式读取数据;

df = pd.read_csv(filename, sep=";", decimal=".", skiprows=7, header=None)

我的文件名是180619.csv其中180619是日期。我想附加读取为对象类型的日期到时间列,并使其成为 datetime64 对象以供将来搜索。

问候

您需要

将文件名解析为可以预置df[0]的套件前缀,然后使用 pd.to_datetime(df[0]) 将列转换为日期时间 - 正如@anky_91所暗示的那样:

创建文件

filename = "180619.txt"
with open(filename, "w") as f: 
    f.write("""
00:05:00;300;3;0;0;0;0;0;0;0;0;0;0;18.1;3.8;2.3
00:05:00;300;7;0;0;0;0;0;0;0;0;0;0;16.7;3.8;2.3
00:05:00;300;1;0;0;0;0;0;0;0;0;0;0;17.387;3.8;2.3
00:05:00;300;2;0;0;0;0;0;0;0;0;0;0;16.2;3.8;2.3
""")

进程文件:

import pandas as pd
filename = "180619.txt"
df = pd.read_csv(filename, sep=";", decimal=".", skiprows=1, header=None)
print(df)
# yymmdd
fn = filename.split(".")[0]
# 3.6 f-string, use "20{}/{}/{} ".format(fn[:2],fn[2:4],fn[4:]) if f-string not available
fn = f"20{fn[:2]}/{fn[2:4]}/{fn[4:]} " 
df[0] = fn+df[0]
print(df)
df[0] = pd.to_datetime(df[0])
print(df)

输出:

# data
         0    1   2   3   4   5   6   7   8   9   10  11  12      13   14   15
0  00:05:00  300   3   0   0   0   0   0   0   0   0   0   0  18.100  3.8  2.3
1  00:05:00  300   7   0   0   0   0   0   0   0   0   0   0  16.700  3.8  2.3
2  00:05:00  300   1   0   0   0   0   0   0   0   0   0   0  17.387  3.8  2.3
3  00:05:00  300   2   0   0   0   0   0   0   0   0   0   0  16.200  3.8  2.3
# string datetime
                    0    1   2   3   4   5   ...  10  11  12      13   14   15
0  2018/06/19 00:05:00  300   3   0   0   0  ...   0   0   0  18.100  3.8  2.3
1  2018/06/19 00:05:00  300   7   0   0   0  ...   0   0   0  16.700  3.8  2.3
2  2018/06/19 00:05:00  300   1   0   0   0  ...   0   0   0  17.387  3.8  2.3
3  2018/06/19 00:05:00  300   2   0   0   0  ...   0   0   0  16.200  3.8  2.3 
[4 rows x 16 columns]
# datetime converted
                   0    1   2   3   4   5   ...  10  11  12      13   14   15
0 2018-06-19 00:05:00  300   3   0   0   0  ...   0   0   0  18.100  3.8  2.3
1 2018-06-19 00:05:00  300   7   0   0   0  ...   0   0   0  16.700  3.8  2.3
2 2018-06-19 00:05:00  300   1   0   0   0  ...   0   0   0  17.387  3.8  2.3
3 2018-06-19 00:05:00  300   2   0   0   0  ...   0   0   0  16.200  3.8  2.3 
[4 rows x 16 columns]

编辑:

如果在转换df[0]时遇到错误,可以使用pd.to_datetime(df[0], errors='coerce')将错误的值强制NaT - 请参阅pd.to_datetime的文档

最新更新