说明:这不是一篇pandas入门教程,也不是什么经验之谈。因为我也没有认真去学习pandas的入门知识,然后实现自己想要的一些功能写的自己日常的一些简单的笔记罢了

为什么会接触pandas

最近刚好需要处理一个csv文件,设计到数据筛选这一块,还有需要用python来发送html网页。Linux上我可以很熟练的使用sed,awk完成数据筛选的操作,但是python这一块因为不是用得很熟练,写起来比较笨,然后我在github上找了下,发现了个写的还可以的代码:https://github1s.com/laidefa/Python_SentEmailExcel/blob/HEAD/README.md

然后我看到了这位大佬使用pandas模块来将表格的数据来导出成html网页,加了一些css代码后,竟然还很漂亮,于是我就查了以下,发现pandas主要是做数据分析的,生成html只是一个小功能,太棒了,于是乎,就花了两个下午研究了下。

pandas如何快速学习

pandas官网文档: 官网文档不会有错的

Pandas教程(菜鸟教程) :百度搜索Pandas,第一个是官网,第二个便是菜鸟教程,偶尔相信下百度,还是不错的

pandas小知识点

1、安装pandas模块

python -m pip install pandas

2、导入pandas模块

import pandas as pd

3、将一个字典类型数据转换为表格

df = pd.DataFrame(
         {
             "Name": [
                 "Braund, Mr. Owen Harris",
                 "Allen, Mr. William Henry",
                 "Bonnell, Miss. Elizabeth",
              ],
             "Age": [22, 35, 58],
             "Sex": ["male", "male", "female"],
         }
     )
df

然后jupyter会输出一个漂亮的表格

image-20210819225502613

4、读取csv文件

df = pd.read_csv('gds.csv')

读取前两行

df.head(2)
image-20210819225805051

读取后三行

df.tail(3)
image-20210819225920222

返回表格的基本信息

df.info()
#输出了有多少行,多少列,每列数据类型等等
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1201 entries, 0 to 1200
Data columns (total 35 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   Id      1201 non-null   object 
 1   *主机名    1201 non-null   object 
 2   *IP     1201 non-null   object 
 3   协议组     1201 non-null   object 
 4   激活      1201 non-null   bool   

5、数据清洗

参考:https://www.runoob.com/pandas/pandas-cleaning.html

去除空列,没去掉空列有35列,去掉后只剩下14列

#数据清洗:设置参数 axis=1 表示逢空值去掉整列
df.dropna(axis=1, how='any', thresh=None, subset=None, inplace=False)
image-20210819230637807

6、保存到csv文件

# df.to_csv()
# 例如将上面清洗后的数据保存到test.csv文件里面
df.dropna(axis=1, how='any', thresh=None, subset=None, inplace=False)
df.to_csv('test.csv')

7、loc函数筛选数据

参考:https://www.jianshu.com/p/805f20ac6e06

loc函数筛选主机名包含master或harbor的行,

df.loc[df['*主机名'].str.contains('master|harbor')]

筛选主机名包含master或harbor的行,并且筛选指定的几列

df[['*主机名', '*IP', '管理用户名称', '*系统平台', '节点名称']][df['*主机名'].str.contains('master|cargo')]

8、将csv表格转为html网页

df_html = df.to_html(index=True)

生成的页面是这样的,不是很好看

image-20210819231438309

可以加上下面几行css代码,给表格换个边框

<style type="text/css">
table {
border-right: 1px solid #99CCFF;
border-bottom: 1px solid #99CCFF;
}
table td {
border-left: 1px solid #99CCFF;
border-top: 1px solid #99CCFF;
}
table th {
border-left: 1px solid #99CCFF;
border-top: 1px solid #99CCFF;
}
</style>

再使用下面代码居中文字,修改表头,修改首行颜色等等,效果立马不一样

html=str(df_html).replace('<table border="1" class="dataframe">','<table border="0" class="dataframe" style="width:100%" cellspacing="2" cellpadding="2">')

html=str(html).replace('<tr style="text-align: right;">',' <div style="text-align:center;width:100%;padding: 8px; line-height: 1.42857; vertical-align: top; border-top-width: 1px; border-top-color: rgb(221, 221, 221); background-color: #3399CC;color:#fff"><strong><font size="4">我是大标题</font></strong></div><tr style="background-color:#FFCC99;text-align:center;">')

html=str(html).replace('<tr>','<tr style="text-align:center">')

html=str(html).replace('<th></th>','<th>num</th>')
image-20210819232557071

我的目的基本达成了,有空了再学pandas