python使用read_table读取txt文件
python使用read_table读取txt文件
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)
经典错误
dat_df = pd.read_table(os.path.join(file_dir, data_paths[meso_num][1]), encoding='gbk', sep='\t+',
error_bad_lines=False, skiprows=10, nrows=10, parse_dates=['年月日', '时间戳'])
少一个中括号,parse_dates=[‘年月日’, ‘时间戳’],
正确答案是 parse_dates=[['年月日', '时间戳']]
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日’)
4. quotechar=‘"’
参数 quotechar='"'
在 pandas
读取CSV文件时被用来指定一个特定的字符来封闭被视为一个整体的字段。这在处理包含分隔符(例如逗号)的文本字段时非常有用。让我详细解释一下:
-
封闭字段: 在CSV文件中,字段通常由逗号(或其他分隔符)分隔。如果某个字段本身包含了逗号,这会导致解析错误,因为解析器可能会错误地将一个字段拆分成多个字段。为了避免这种情况,可以用引号(或其他字符)将包含逗号的文本封闭起来。
-
示例: 假设有这样一条CSV记录:
"Smith, John",29,"New York, NY"
在这个例子中,名字和城市字段中都包含逗号。如果不使用引号封闭这些字段,解析器可能会错误地将名字和城市拆分成多个字段。通过使用引号,解析器可以正确地识别出这些字段。
-
quotechar
参数: 在pandas.read_csv()
函数中,quotechar
参数用于指定哪个字符被用作封闭字段的引号。默认情况下,它是双引号 ('"'
)。如果您的数据使用不同的字符来封闭字段,比如单引号 ('
), 您需要相应地更改这个参数。
例如,如果您的CSV数据像这样:
'Los Angeles, CA',34
您应该使用 quotechar="'"
来正确解析字段。
简而言之,quotechar
参数帮助 pandas
正确解析那些内部包含分隔符的字段,确保数据被准确读取。
参考资料:
[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
更多推荐
所有评论(0)