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

时间:2019-03-24 08:54:33

标签: python pandas

我有以下格式的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对象,以供将来搜索。

此致

1 个答案:

答案 0 :(得分:2)

您需要将文件名解析为适合的前缀,然后可以将其前缀为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-请参见documentation of pd.to_datetime