Python Pandas总结
1. 建立dataframe
import pandas as pd
data = [['A1', 28], ['A2', 32], ['A3', 1], ['A4', 0],
['A5', 10], ['A6', 22], ['A7', 30], ['A8', 19],
['B1', 145], ['B2', 27], ['B3', 36], ['B4', 25]]
df_data = pd.DataFrame(data,columns=["A","B"])
2. Read Csv
df_data = pd.read_csv("路径\文件名.csv",index_col = "A") ///index_col:指定一个列为索引列
3. 查看数据(数据获取)
df_data.head(n) 查看前n行的数据,不填n默认查看5行
df_data.tail(n) 查看后n行的数据,不填n默认查看5行
df_data.columns 查看列名
df_data.index 查看行名
df_data["列名"] 获取此列数据
df_data.列名 获取此列数据(不加引号)
df_data[["列名1","列名2"]] 获取多列数据
df_data[n] 获取第n行数据
df_data[1:4] 获取1~4行数据
df_data[[1,3,5]] 获取1,3,5行数据
df_data.loc[n,'XXX'] 获取“XXX”列第N排数据
df_data.loc[n,:] 获取n行全部列的数据(:意味着0到结尾)
df_data.loc[n,"A":"B"] 获取n行A列到B列的数据
df_data.loc[[1,3,4],["A","D"]] 获取1,3,4行中A列和D列的数据
4. 数据处理
df_data.ABC.mean() 获取"ABC"列的平均值
df_data.["ABC"].max() 获取“ABC”列最大值
df_data.describe() 获取各个列的数据各项指标(返回新的dataframe)
df_data["ABC"].value_counts() 获取ABC列所有行的数据计数
df_data["ABC"].unique() 获取ABC列所有的数据典型
例如(df_data["Grade"].unique()返回['A','A-','B+','B','B-'])
df_data.shape 获取规格
df_data.dtypes 返回数据类型
5. 列表处理
A. 基础操作
df_data["new_column_name"] = 1 //创造一个名为new_column_name,内容为1的列(如果这个列名已经存在,则改动内部数据为1)
df_data['Final_Percentage'] = df_data['Final']/100 //创造一个名为Final_Percentage的列,内容为Final列数据➗100
del df_data['ABC'] // df_data.drop('ABC',后面如下) //(单列删除)删除列“ABC”
df_data.drop(['A','B'], axis=1, inplace=True) //(复合行列删除)axis=1→column axis=0→row
df_data.sort_values(by=['A','B'],inplace=True,ascending=[True,True]) //列表排序(参数:1. by 根据什么排序;
2. inplace;
3. ascending:正序【True】or逆序【False】;
4. kind:排序类型;
5.axis= 0 or 1:按列or行排列;
6.na_position = {'first','last'} Na值or空值的显示位置)
函数作用 | 函数名 |
---|---|
取列表中某列最大值所在行的index值(返回一个带有索引和index值的dataframe) | df_data [‘A’] . idxmax() |
例子:
B. 设置datetime列:
(1)在录入文件时告诉pandas某一列为datatime
pd_data = pd.read_csv('ABC.csv',parse_dates = ["Issue_Date"])
(2)在录入文件之后转换行列数据类型
df_data["ABC"] = pd.to_datatime(df_data["ABC"])
(3)Timestamp Attributes(时间属性用法)
first_datatime = df_data.loc[0,'Issue_Data']
函数名 | 返回值 |
---|---|
first_datatime.hour | 小时 |
first_datatime.dayofweek | |
first_datatime.is_leap_year | 是否为闰年 |
当使用datatime attributes作为series时,可以用.dt 来代替
C. 高级处理
···(1)处理列
函数作用 | 函数名 |
---|---|
获取所有列名 | df_data.columns |
改变列名 | df_data.rename( columns= {“Mini_Exam1” : “Mini_Exam_1” , “Mini_Exam2” : “Mini_Exam_2”}) |
···(2)处理图表
函数作用 | 函数名 |
---|---|
列表堆栈 | pd.concat( [ df_data_A , df_data_other ], axis = 0) 【axis= 0意味着按排堆叠;axis=1 意味着按列堆叠】 |
如果不做处理,index列表也是按照原来的两个列表直接堆叠。因此我们需要重置索引:
在函数中加入 ignore_index = True
df_data = pd.concat([ df_data_A , df_data_other ], axis = 0, ignore_index = True)
函数作用 | 函数名 |
---|---|
设置Name列为索引列 | df_data.set_index(“Name”, inplace = True) |
重设行数为索引列 | df_data.reset_index( drop = False, inplace = True) |
···(3)处理图标里面丢失数据
函数作用 | 函数名 |
---|---|
读取列表时定义什么是缺失数据 | df_data = pd.read_csv (“Missing_Data.csv”, na_value = [“NaN”,“not available”]) |
定义每列的特定缺失数据 | df_data = pd.read_csv (“Missing_Data.csv”, na_value = {“Mini_Exam2” : “not available” , “Participation1” : -1 }) |
检查NaN在何处 | df_data.insull() |
统计每处NaN的个数 | df_data.insull().sum() |
删除有NaN的行 | df_data.dropna(axis = 0, inplace = False) |
用某些值代换NaN | df_data.fillna(0, inplace = False) |
用某些值代替特定列的NaN | df_missing.fillna({ “Temp” : ‘ABC’}, inplace = False) |
···(4)Titanic Data Set
函数作用 | 函数名 |
---|---|
在某一行(or列)使用某个函数 | df_data.apply( max, axis = 0) |
在某一行(or列)使用外部函数(以numpy为例) | df_data.apply(np.ceil) |
···(5)用pandas绘图
函数作用 | 函数名 |
---|---|
绘图表 | df_data.plot(kind = ‘scatter’, x = ‘Hours of Sleep’, y = ‘GPA’) |
kind包含 line; bar; barh (horizontal bar plot); hist(histogram); box(boxplot); kde(Kemel Density Estimation plot); density (= kde); area; pie; scatter; hexbin
···(6)列表分组
函数作用 | 函数名 |
---|---|
按照列内内容分组 | df_data.groupby(‘A’,‘B’) |