目录
- 1. 涉及时间列合并
- 2. 列错位修复
- 3. parse_dates和date_parser
- 参考资料:
1. 涉及时间列合并
data2 = pd.read_table(r'E:\data\Molas.txt', encoding='gbk', header=0, index_col=False, parse_dates=[['年月日', '时间戳']])
- header=0 表示第 0 行作为列索引,header=None第0行不作为列名;
- index_col:当为False时,重新生成行索引,也可以自己指定某列为行索引,当index_col=0时,将第一列变为index。
- parse_dates:将某列解析为 date 类型,同时设定 infer_datetime_format = True 会加快解析速度;parse_dates={“datetime”: [0,1,2]}表示解析后重命名为 ‘datetime’
- date_parser=lambda x: pandas.datetime.strptime(x, ‘%Y %m %d’)
- keep_date_col 参数则是用了指定解析为日期格式的列是否保留,True或False。
- skiprows=2,表示前面两行[0, 1]都不读入,等价于skiprows=[0, 1];
- names=[‘’] 指定列名;
- usecols=[‘Y’,‘M’,‘D’,‘PRCP’]:读取这 4 列 ‘Y’,‘M’,‘D’,‘PRCP’;
- sep:用于分割每行字段的字符序列或正则表达式,
- \s快捷方式可以匹配空白字符,比如空格,tab、换行等
- 一般用 \t 或 \t+
时间列被放在了两个列中,需要合并,然后设置为索引,而 parse_dates=[[‘年月日’, ‘时间戳’]] 就是这个作用
当日期和时间被放在两个列时,通过 parse_dates=[[‘Date’, ‘Time’]] 来合并,合并后新列名一般为 ‘Date_Time’
2. 列错位修复
data = pd.read_table(r'F:\0613.txt', encoding='gbk', sep='\s+', skiprows=10, error_bad_lines=False)
读取 txt 格式数据后,发现列错误,年月日、时间戳 两列自动合并成为 1 列,并自动成为索引
而经度、纬度两列,直接被拆分成两列,如何修复?
修改方式:仍然错误
data = pd.read_table(r'F:\0613.txt', encoding='gbk', sep='\t+', skiprows=10, error_bad_lines=False)
正确答案:
data = pd.read_table(r'F:\0613.txt', encoding='gbk', sep='\t+', skiprows=10, error_bad_lines=False)
3. parse_dates和date_parser
parse_dates(动词,主动解析格式)
- parse_dates=True : 尝试解析index为日期格式;
- parse_dates=[0,1,2,3,4] : 尝试解析0,1,2,3,4列为时间格式;
- parse_dates=[[’考试日期’,‘考试时间’]] :传入多列名,尝试将其解析并且拼接起来,parse_dates[[0,1,2]]也有同样的效果;
- parse_dates={’考试安排时间’:[‘考试日期’,‘考试时间’]},将会尝试解析日期和时间拼接起来,并将列名重置为‘考试安排时间’;
注意:重置后列名不能和原列名重复
date_parser(名词,指定解析格式去解析某种不常见的格式)
- date_parser需要配合parse_dates工作,具体需要传入函数
例如时间为2021年2月24日,可以传入 - parse_dates=[0]
- date_parser=lambda x:pd.to_datetime(x,format=’%Y年%m月%d日’)