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