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'])
posted @ 2025-06-21 23:37  AttaSayyid  阅读(12)  评论(0)    收藏  举报