pandas 可以读取的文件格式有很多,这里主要介绍读取 csv, excel, txt 文件。
我将以下表格内容分别存储在 csv、excel、txt 文件中,并分别读取它们。
| seq | price | category | date |
|---|---|---|---|
| a | 1.4 | apple | 2022/7/1 |
| b | 3.4 | banana | 2022/7/5 |
| c | 2.5 | orange | 2022/7/12 |
| d | 1.2 | lemon | 2022/7/30 |
import pandas as pd
df_csv = pd.read_csv('my_csv.csv')
print(df_csv) # 索引列从表格内容的第二行开始算起,第一行视作表头
---------
seq price category date
0 a 1.4 apple 2022/7/1
1 b 3.4 banana 2022/7/5
2 c 2.5 orange 2022/7/12
3 d 1.2 lemon 2022/7/30
import pandas as pd
df_excel = pd.read_excel('my_excel.xlsx')
print(df_excel) # 索引列从表格内容的第二行开始算起,第一行视作表头
---------
seq price category date
0 a 1.4 apple 2022-07-01
1 b 3.4 banana 2022-07-05
2 c 2.5 orange 2022-07-12
3 d 1.2 lemon 2022-07-30
import pandas as pd
df_txt = pd.read_table('my_txt.txt')
print(df_txt) # 索引列从表格内容的第二行开始算起,第一行视作表头
---------
seq price category date
0 a 1.4 apple 2022/7/1
1 b 3.4 banana 2022/7/5
2 c 2.5 orange 2022/7/12
3 d 1.2 lemon 2022/7/30
这里有一些常用的公共参数,header=None 表示第一行不作为列名;index_col 表示把某一列或几列作为索引;usecols 表示读取列的集合,默认读取所有的列;parse_dates 表示需要转化为时间的列;nrows 表示读取的数据行数。上面这些参数在上述的三个函数里都可以使用,下面以读取csv文件为例。
import pandas as pd
df_csv = pd.read_csv('my_csv.csv', header=None)
print(df_csv) # 索引列从表格内容的第一行开始算起
---------
0 1 2 3
0 seq price category date
1 a 1.4 apple 2022/7/1
2 b 3.4 banana 2022/7/5
3 c 2.5 orange 2022/7/12
4 d 1.2 lemon 2022/7/30
df_csv = pd.read_csv('my_csv.csv', index_col='category')
print(df_csv) # 指定某列作为索引列
---------
seq price date
category
apple a 1.4 2022/7/1
banana b 3.4 2022/7/5
orange c 2.5 2022/7/12
lemon d 1.2 2022/7/30
df_csv = pd.read_csv('my_csv.csv', index_col=['seq', 'date'])
print(df_csv) # 指定某几列作为索引列
---------
price category
seq date
a 2022/7/1 1.4 apple
b 2022/7/5 3.4 banana
c 2022/7/12 2.5 orange
d 2022/7/30 1.2 lemon
df_csv = pd.read_csv('my_csv.csv', usecols=['seq', 'category'])
print(df_csv) # 读取指定列
---------
seq category
0 a apple
1 b banana
2 c orange
3 d lemon
df_csv = pd.read_csv('my_csv.csv', parse_dates=['date'])
print(df_csv) # 将指定列转化为时间
---------
seq price category date
0 a 1.4 apple 2022-07-01
1 b 3.4 banana 2022-07-05
2 c 2.5 orange 2022-07-12
3 d 1.2 lemon 2022-07-30
df_csv = pd.read_csv('my_csv.csv', nrows=2)
print(df_csv)
---------
seq price category date
0 a 1.4 apple 2022/7/1
1 b 3.4 banana 2022/7/5
在读取 txt 文件时,经常遇到分隔符非空格的情况,read_table 有一个分割参数 sep ,它使得用户可以自定义分割符号,以进行 txt 数据的读取。
import pandas as pd
df_txt = pd.read_table('my_txt.txt')
print(df_txt)
---------
seq, price, category, date
0 a, 1.4, apple, 2022/7/1
1 b, 3.4, banana, 2022/7/5
2 c, 2.5, orange, 2022/7/12
3 d, 1.2, lemon, 2022/7/30
df_txt = pd.read_table('my_txt.txt', sep=',')
print(df_txt)
---------
seq price category date
0 a 1.4 apple 2022/7/1
1 b 3.4 banana 2022/7/5
2 c 2.5 orange 2022/7/12
3 d 1.2 lemon 2022/7/30
下面读取的表以||||为分割,直接读取的结果显然不是理想的,这时可以使用 sep ,同时需要指定引擎为 python 。在使用 read_table 的时候需要注意,参数 sep 中使用的是正则表达式,因此需要对 | 进行转义
变成 \| ,否则无法读取到正确的结果。
import pandas as pd
df_txt = pd.read_table('my_txt.txt')
print(df_txt)
---------
seq |||| category
0 a |||| apple
1 b |||| banana
2 c |||| orange
3 d |||| lemon
df_txt = pd.read_table('my_txt.txt', sep='\|\|\|\|', engine='python')
print(df_txt)
---------
seq category
0 a apple
1 b banana
2 c orange
3 d lemon
一般在数据写入中,最常用的操作是把 index 设置为 False ,特别是当索引没有特殊意义的时候,这样能在保存数据时去除索引。
pandas 中没有定义 to_table 函数,但是 to_csv 可以保存为 txt 文件,并且允许自定义分隔符,常用制表符 \t 分割。
# 数据存储为csv文件
df_csv.to_csv('my_csv_saved.csv', index=False)
# 数据存储为excel文件
df_excel.to_excel('my_excel_saved.xlsx', index=False)
# 数据存储为txt文件
df_txt.to_csv('my_txt_saved.csv', sep='\t', index=False)
如果想要把表格快速转换为 markdown 和 latex 语言,可以使用 to_markdown 和 to_latex 函数,此处需要安装 tabulate 包。
df_csv = pd.read_csv('my_csv.csv')
print(df_csv.to_markdown())
---------
| | seq | price | category | date |
|---:|:------|--------:|:-----------|:----------|
| 0 | a | 1.4 | apple | 2022/7/1 |
| 1 | b | 3.4 | banana | 2022/7/5 |
| 2 | c | 2.5 | orange | 2022/7/12 |
| 3 | d | 1.2 | lemon | 2022/7/30 |
df_csv = pd.read_csv('my_csv.csv')
print(df_csv.to_latex())
---------
\begin{tabular}{llrll}
\toprule
{} & seq & price & category & date \\
\midrule
0 & a & 1.4 & apple & 2022/7/1 \\
1 & b & 3.4 & banana & 2022/7/5 \\
2 & c & 2.5 & orange & 2022/7/12 \\
3 & d & 1.2 & lemon & 2022/7/30 \\
\bottomrule
\end{tabular}