Pandas的基本操作
Pandas的基本操作
什么是Pandas?
Pandas是Python中强大的数据处理和分析的工具之一,专门用来处理表格数据,相当于一个Python版本的Excel,但是它的功能远远比Excel更强大,它可以帮助你对于结构化数据(如:Excel、CSV、SQL、JSON、HTML等格式的数据)
pandas的安装
pip install pandas
读取CSV文件
import pandas as pd
ec = pd.read_csv(r'path_to_your_csv_dir\results.csv')
print(ec)
读取Excel文件
import pandas as pd
#读取excel文件
ec = pd.read_excel(r'path_to_your_excel_dir\results.xlsx')
print(ec)
格式转换
#excel格式转换为csv,可在工作目录下生成一个转换好格式的新文件
ec.to_csv('new_data.csv')
读取的结果是我使用YOLOv12得到的一个训练过程记录文件,如下我们可以明显的看出其表头和内容未对齐,看着十分别扭
epoch time train/box_loss train/cls_loss train/dfl_loss ... val/cls_loss val/dfl_loss lr/pg0 lr/pg1 lr/pg2
0 1 619.831 3.12155 4.50017 4.25913 ... 95.6605 1.10058 0.003331 0.003331 0.003331
1 2 1233.840 2.14706 2.97736 2.86289 ... 131.2330 0.52041 0.006444 0.006444 0.006444
2 3 1821.180 1.28146 1.56311 1.86488 ... 120.6080 0.43832 0.009338 0.009338 0.009338
3 4 2405.180 1.07947 1.16905 1.63536 ... 141.3200 0.38960 0.009010 0.009010 0.009010
4 5 2989.990 0.96557 0.97791 1.51678 ... 191.0060 0.35974 0.008680 0.008680 0.008680
5 6 3586.530 0.90356 0.88097 1.45390 ... 154.6050 0.35663 0.008350 0.008350 0.008350
6 7 4091.540 0.86546 0.82477 1.41605 ... 175.4820 0.35015 0.008020 0.008020 0.008020
7 8 4695.630 0.82501 0.77790 1.38289 ... 186.1260 0.33206 0.007690 0.007690 0.007690
解决内容对不齐的操作如下:
pd.set_option('display.unicode.east_asian_width', True) #注意这里的设置对象为pd而非你的文件
这下舒服多了
epoch time train/box_loss train/cls_loss train/dfl_loss ... val/cls_loss val/dfl_loss lr/pg0 lr/pg1 lr/pg2
0 1 619.831 3.12155 4.50017 4.25913 ... 95.6605 1.10058 0.003331 0.003331 0.003331
1 2 1233.840 2.14706 2.97736 2.86289 ... 131.2330 0.52041 0.006444 0.006444 0.006444
2 3 1821.180 1.28146 1.56311 1.86488 ... 120.6080 0.43832 0.009338 0.009338 0.009338
3 4 2405.180 1.07947 1.16905 1.63536 ... 141.3200 0.38960 0.009010 0.009010 0.009010
4 5 2989.990 0.96557 0.97791 1.51678 ... 191.0060 0.35974 0.008680 0.008680 0.008680
5 6 3586.530 0.90356 0.88097 1.45390 ... 154.6050 0.35663 0.008350 0.008350 0.008350
6 7 4091.540 0.86546 0.82477 1.41605 ... 175.4820 0.35015 0.008020 0.008020 0.008020
7 8 4695.630 0.82501 0.77790 1.38289 ... 186.1260 0.33206 0.007690 0.007690 0.007690
有的时候我们并不需要取表格的全部内容,这时候就需要我们选取部分数据
只取前n行
方法1:使用nrows参数(适合大文件)
ec = pd.read_excel(r'path_to_your_excel_dir\results.xlsx', nrows=3)
epoch time train/box_loss train/cls_loss train/dfl_loss ... val/cls_loss val/dfl_loss lr/pg0 lr/pg1 lr/pg2
0 1 619.831 3.12155 4.50017 4.25913 ... 95.6605 1.10058 0.003331 0.003331 0.003331
1 2 1233.840 2.14706 2.97736 2.86289 ... 131.2330 0.52041 0.006444 0.006444 0.006444
2 3 1821.180 1.28146 1.56311 1.86488 ... 120.6080 0.43832 0.009338 0.009338 0.009338
方法2:先读取全部内容,再取前面的n行数据(不适合大文件)
ec = pd.read_excel(r'path_to_your_excel_dir\results.xlsx')
ec_top3 = ec.head(3)
也可以使用切片的方法取前n行数据
ec_top3 = ec[:3] #注意左开右闭,同时注意行号的索引
跳过第几行
如果想跳过第几行可以使用skiprows参数,比如跳过第一行,从第二行开始再往后取3行
ec_2_to_8 = read_csv('path_to_your_excel_dir\results.csv', skiprows=1, nrows=3)
同样的我们也可以使用drop方法先读取全部数据,再删除指定行
ec = ec.drop([0, 3, 4])
1 619.831 3.12155 4.50017 4.25913 0.00511 0.02681 0.00681 0.00189 0.70851 95.6605 1.10058 0.00333103 0.00333103.1 0.00333103.2
0 2 1233.84 2.14706 2.97736 2.86289 0.68778 0.64476 0.69643 0.42901 0.33227 131.233 0.52041 0.006444 0.006444 0.006444
1 3 1821.18 1.28146 1.56311 1.86488 0.70438 0.75259 0.73922 0.50679 0.27686 120.608 0.43832 0.009338 0.009338 0.009338
2 4 2405.18 1.07947 1.16905 1.63536 0.88723 0.83709 0.92606 0.70493 0.23859 141.320 0.38960 0.009010 0.009010 0.009010
额外的,如果我们想跳过的行数不止一行,我们可以将skiprows 参数改成一个列表的形式
ec_2_to_8 = read_csv('path_to_your_excel_dir\results.csv', skiprows=[0,4,5], nrows=3) #注意列表的参数
可以看出,在我们读取表格的时候,表格的表头也算作一行, 但是我们取行数的时候我们跳过了它
这个时候需要我们指定列名,添加names参数
ec = pd.read_csv(r'path_to_your_excel_dir\results.csv',skiprows=1, nrows=3, names=['epoch','time','train/box_loss','train/cls_loss','train/dfl_loss','metrics/precision(B)','metrics/recall(B)','metrics/mAP50(B)','metrics/mAP50-95(B)','val/box_loss','val/cls_loss','val/dfl_loss','lr/pg0','lr/pg1','lr/pg2'])

浙公网安备 33010602011771号