pandas
python
时间
看过来
《pandas 教程》 持续更新中,可作为 pandas 入门进阶课程、pandas 中文手册、用法大全,配有案例讲解和速查手册。提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。查看更新日志。作者开办 Python 数据分析培训,详情 Python 数据分析培训。
![]() |
本教程作者所著新书《深入浅出Pandas:利用Python进行数据处理与分析》(ISBN:9787111685456)已由机械工业出版社出版上市,各大电商平台有售,欢迎:查看详情并关注购买。 |
在读取 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='\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
'''
其中两个参数的意义如下:
这样就正确读取了数据。
(完)