看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在读取 CSV 文件时,会存在各种不规则的情况,在本例中,我们来学习如何将不规则的数据读取为一个时间列。为了方便演示,我们用了字符串形式,用 StringIO 来缓存。
以下数据第一行有三个部分:time、stamp、col1,它们之间的空格数不等,第二行及以后为数据,也有三部分日期、时间、数值,空格同样是不规则的。
import pandas as pd
from io import StringIO
data = '''
time stamp col1
2021-01-11 11:00 0
2021-01-11 12:00 0
2021-01-11 13:00 1
2021-01-11 14:00 1
2021-01-11 15:00 0
'''
需求希望读取为两列,一列为时间(包含日期和时间),一列为数值。代码如下:
pd.read_csv(StringIO(data),
sep=r'\s+',
parse_dates={'date_time': [0, 1]})
'''
date_time col1
0 2021-01-11 11:00:00 0
1 2021-01-11 12:00:00 0
2 2021-01-11 13:00:00 1
3 2021-01-11 14:00:00 1
4 2021-01-11 15:00:00 0
'''
其中有两个参数的功能如下:
这样就正确读取了数据。
与第一种情况不同,情况二的表头与第一行列后的数据列数不同,数据如下:
import pandas as pd
from io import StringIO
data = '''
timestamp col1
2021-01-11 11:00 0
2021-01-11 12:00 0
2021-01-11 13:00 1
2021-01-11 14:00 1
2021-01-11 15:00 0
'''
读取代码如下:
pd.read_csv(StringIO(data),
sep='\s{3,}',
engine='python')
'''
date_time col1
0 2021-01-11 11:00:00 0
1 2021-01-11 12:00:00 0
2 2021-01-11 13:00:00 1
3 2021-01-11 14:00:00 1
4 2021-01-11 15:00:00 0
'''
其中两个参数的意义如下:
这样就正确读取了数据。
(完)
更新时间:2024-08-18 16:11:47 标签:pandas python 时间