目录
-
-
- 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=[[‘年月日’, ‘时间戳’]] 就是这个作用
![python使用read_table读取txt文件_第1张图片](http://img.e-com-net.com/image/info8/f02c8caf9b154880992bf333650931a6.jpg)
![python使用read_table读取txt文件_第2张图片](http://img.e-com-net.com/image/info8/0f35f6ec90e24eeb8a46746ac563996b.jpg)
当日期和时间被放在两个列时,通过 parse_dates=[[‘Date’, ‘Time’]] 来合并,合并后新列名一般为 ‘Date_Time’
![python使用read_table读取txt文件_第3张图片](http://img.e-com-net.com/image/info8/6d1fd6415d32473f82ae3a11239d6169.jpg)
2. 列错位修复
data = pd.read_table(r'F:\0613.txt', encoding='gbk', sep='\s+', skiprows=10, error_bad_lines=False)
读取 txt 格式数据后,发现列错误,年月日、时间戳 两列自动合并成为 1 列,并自动成为索引
而经度、纬度两列,直接被拆分成两列,如何修复?
![python使用read_table读取txt文件_第4张图片](http://img.e-com-net.com/image/info8/d74ab2af894b43f68a2d88206fb92b5e.jpg)
修改方式:仍然错误
data = pd.read_table(r'F:\0613.txt', encoding='gbk', sep='\t+', skiprows=10, error_bad_lines=False)
![python使用read_table读取txt文件_第5张图片](http://img.e-com-net.com/image/info8/654a00e18865496bb874f929423f2690.jpg)
正确答案:
data = pd.read_table(r'F:\0613.txt', encoding='gbk', sep='\t+', skiprows=10, error_bad_lines=False)
![python使用read_table读取txt文件_第6张图片](http://img.e-com-net.com/image/info8/88cb152cb8654adb88abdd84485c9ef3.jpg)
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日’)
参考资料:
[1] pandas之 read_table函数读取txt文件 2019.1
[2] pd. read_csv解析日期格式字符串parse_dates参数,以及pd.to_datetime()、dateutil.parser.parse()与datetime.strptime()比较 2019.10
[3] Python pandas,时间序列,将多列合并成完整的时间戳 PeriodIndex 2019.2
[4] python中pd读取文件parse_dates和date_parser参数运用 2021.2