您的位置:首页 > 编程语言 > Python开发

pytho 4000 n之pandas库学习常用函数

2017-09-23 16:03 387 查看
github地址:https://github.com/xiaoping1988/ping-ml

读取文件

import numpy as np
import pandas as pd
# pandas会默认把第一行当做列名,如果第一行不是列名,请指定列名

tt = pd.read_csv('titanic_train.csv')
#tt = pd.read_csv('titanic_train_no_columns.csv',names=['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp','Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'])
print('类型:',type(tt))
print('矩阵结构:',tt.shape)
print('矩阵中各列数据类型:\n',tt.dtypes)
print('矩阵列名集合:',tt.columns)
print('矩阵列名集合:',tt.columns.tolist())


读取数据

import numpy as np
import pandas as pd

tt = pd.read_csv('titanic_train.csv')
print('读取头部几行:\n',tt.head())
print('读取头部10行:\n',tt.head(10))
print('读取尾部几行:\n',tt.tail())
print('读取尾部10行:\n',tt.tail(10))
print('按行指定一个范围索引读取,读取索引1至索引5的行数据:\n',tt.loc[1:5])
print('根据行索引读取指定的几行,读取索引[1,3,5]的行数据:\n',tt.loc[[1,3,5]])
print('按列读取数据,读取某一列数据:\n',tt['Name'])
print('按列读取数据,读取多列数据:\n',tt[['Name','Sex','Age']])


进行计算,改变列数据,增加列

import numpy as np
import pandas as pd

tt = pd.read_csv('titanic_train.csv')
plus = tt['PassengerId'] + 100
print('对某列加减乘除,加法:\n',plus)
sub = tt['PassengerId'] - 10
print('对某列加减乘除,减法:\n',sub)
mul = tt['PassengerId'] * 100
print('对某列加减乘除,乘法:\n',mul)
divide = tt['PassengerId'] / 10
print('对某列加减乘除,除法:\n',divide)
## 对两列加减乘除
pp = tt['PassengerId'] + tt['Pclass']
print('对两列加减乘除,加法:\n',pp)
## 改变某列数据
tt['Pclass'] = tt['Pclass'] * 10
print('改变某列数据:\n',tt['Pclass'])
## 增加某列
tt['PassengerId100'] = plus
print('增加列:\n',tt.columns.tolist())
print(tt.head())


统计列最大值、最小值、平均值、汇总值等

import numpy as np
import pandas as pd

tt = pd.read_csv('titanic_train.csv')
print('统计某列最大值:',tt['Age'].max())
print('统计某列最小值:',tt['Age'].min())
print('统计某列平均值:',tt['Age'].mean())
print('统计某列汇总值:',tt['Age'].sum())


按列数据进行排序

import numpy as np
import pandas as pd

tt = pd.read_csv('titanic_train.csv')
age = tt.sort_values('Age')
print('升序:\n',age)
age2 = tt.sort_values('Age',ascending=False)
print('降序:\n',age2)
age3 = tt.sort_values(['Age','Pclass'])
print('按多列排序:\n',age3)
age4 = age.reset_index(drop=True)
print('排序之后重置索引序号:\n',age4)


求缺失值

import numpy as np
import pandas as pd

tt = pd.read_csv('titanic_train.csv')
age = tt['Age']
age_is_null = pd.isnull(age)
#print(age_is_null)
age_is_null_true = age[age_is_null]
#print(age_is_null_true)
print('null值数量:',len(age_is_null_true))
age_is_not_null = age[age_is_null == False]
print('not null值数量:',len(age_is_not_null))


按列分组统计数据,group by操作

import numpy as np
import pandas as pd

tt = pd.read_csv('titanic_train.csv')
pa_mean = tt.pivot_table(index='Pclass',values='Age')
print('按列分组求平均值:\n',pa_mean)
pa_mean2 = tt.pivot_table(index='Pclass',values='Age',aggfunc=np.mean)
print('按列分组求平均值:\n',pa_mean2)
pa_max = tt.pivot_table(index='Pclass',values='Age',aggfunc=np.max)
print('按列分组求最大值:\n',pa_max)
pa_min = tt.pivot_table(index='Pclass',values='Age',aggfunc=np.min)
print('按列分组求最小值:\n',pa_min)
pa_sum = tt.pivot_table(index='Pclass',values='Age',aggfunc=np.sum)
print('按列分组求汇总值:\n',pa_sum)
pa_len = tt.pivot_table(index='Pclass',values='Age',aggfunc=len)
print('按列分组求count值:\n',pa_len)
paf_mean = tt.pivot_table(index='Pclass',values=['Age','Fare'])
print('按列分组求多列的平均值:\n',paf_mean)


处理缺失值

import numpy as np
import pandas as pd

tt = pd.read_csv('titanic_train.csv')
print('原始结构:',tt.shape)
# 按列处理缺失值,只要列中存在NaN值则删除此列
dp = tt.dropna(axis=1)
print('按列处理后的结构,只要列中存在NaN值则删除此列:',dp.shape)
# 按行处理缺失值,只要行中存在NaN值则删除此行
dp2 = tt.dropna(axis=0)
print('按行处理后的机构,只要行中存在NaN值则删除此行:',dp2.shape)
# 按行处理缺失值,只要行中的指定列存在NaN值才删除此行
dp3 = tt.dropna(axis=0,subset=['Age','Fare'])
print('按行处理后的机构,只要行中的指定列存在NaN值才删除此行:',dp3.shape)
# 给所有的缺失值赋予一个默认值
tt.fillna(value=-99,axis=1,inplace=True) # inplace=True代表不新生成一个dataframe
tt.sort_values(['Age','Pclass'],inplace=True)
print(tt.head())


自定义函数统计

import numpy as np
import pandas as pd

tt = pd.read_csv('titanic_train.csv')
# 统计每列的缺失值数量,不为缺失值数量
def null_count(column):
return len(tt[pd.isnull(column)])
def not_null_count(column):
null = pd.isnull(column)
return len(tt[null == False])
print('各列缺失值数量:\n',tt.apply(null_count))
print('各列有值数量:\n',tt.apply(not_null_count))

# 转变每行中的某列值
def age_row(row):
age = row.Age
if pd.isnull(age):
return '未知年龄'
elif age>=18:
return '成年人'
else:
return '未成年人'

age_n = tt.apply(age_row,axis=1)
tt['Age_n'] = age_n
age_group = tt.pivot_table(index='Age_n',values=['Pclass','Fare'])
print('转变每行中的某列值:\n',age_group)


$(".MathJax").remove();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python pandas