pandas库的使用(知识整理)

综述

学生党整理一些关于数据分析的知识:主要整理了pandas库内一些函数的用法及一些数据预处理的方式(以two.csv和titanic_train(test).csv数据为例子)。包括了读取csv文件中的数据、显示文件中数据及数据属性的一些方式、向数据集中添加新的变量数据、排序、计算均值及分类计算均值的方法、剔除变量、单个数据读取、重新设置索引顺序、apply的函数操作、Series的基本操作、DataFrame类型索引重新设置等操作。

代码模块

读取csv类型文件的内容

import pandas
two = pandas.read_csv('two.csv')    #非常常用
print(two)
print(type(two))
print(two.dtypes)
#print(help(pandas.read_csv))   帮助

显示数据及数据类型

读取样本前后几行数据,默认为读取5行数据

print(two.head(3))  #参数为样本数量的前3行
print(two.tail(3))  #参数为样本数量的后3行

读取对应行或对应几行数据

print(two.loc[0])   #读取第一条数据
print(two.loc[3:4]) #切片取数据

显示数据大小及变量名称

print(two.columns)  #显示two的变量名称
print(two.shape)    #矩阵的大小

读取单个或多个变量所有数据

print(two['x1'])    #取变量为x1的所有数据
columns = ['x1','x2']
print(two[columns]) #同时读取两个变量的所有数据

以two.csv文件为例,输出全部变量的数据

#输出所有x变量的数据(除了y)
columns = two.columns.tolist()
get_columns = []
for i in columns:
    if 'x' in i:
        get_columns.append(i)
print(two[get_columns])

添加变量数据

添加新变量进行数据集,新变量数据的样本量要与数据集中的样本量相同(添加标准化后数据)

#将x1和x2的和作为z变量,添加到数据two中
new_columns = two['x1']+two['x2']
two['z'] = new_columns
print(two.columns)

#z数据标准化后得到z_gis
new_columns = (two['z'] - two['z'].min())/(two['z'].max() - two['z'].min())
two['z_gis'] = new_columns
print(two[['z','z_gis']])

排序

根据某一条数据进行排序

#排序
two.sort_values('x2',inplace=True,ascending=True)   #升序,默认情况ascending为True
print(two['x2'])
two.sort_values('x2',inplace=True,ascending=False)  #降序
print(two['x2'])

以Titanic数据为例的操作

剔除缺失数据后的平均数计算

Age缺失数据剔除后计算平均年龄(单类)

age = titanic_train['Age']
print(age)
age_is_null = pd.isnull(age)    #判断age中缺失的数据,输出类型为bool
print(age_is_null)
age_null_true = age[age_is_null]
print(len(age_null_true))   #输出数据缺失的个数
#方法一
age_true = titanic_train['Age'][age_is_null == False]   #剔除数据缺失的数据
correct_mean_age = sum(age_true)/len(age_true)
print(correct_mean_age)
#方法二
age_true = titanic_train['Age'].mean()
print(age_true)

Pclass三类数据每类的平局价格、存活、年龄(三类)

passenger_classes = {1,2,3} #船票种类
fares_by_class = {}
for this in passenger_classes:
    pclass_rows = titanic_train[titanic_train['Pclass'] == this]    #读取对应船票种类的样本
    pclass_fares = pclass_rows['Fare'].mean()   #计算对应船票种类样本中价格的平均数
    fares_by_class[this] = pclass_fares #传入字典中
print(fares_by_class)
#pivot_table函数的使用——各船票存活平均值
passenger_survival = titanic_train.pivot_table(index='Pclass',values='Survived',aggfunc=np.mean)
print(passenger_survival)
#船票与年龄平均
passenger_age = titanic_train.pivot_table(index='Pclass',values='Age')
print(passenger_age)
#船票与价格获救——总数
passenger_stats = titanic_train.pivot_table(index='Pclass',values=['Fare','Survived'],aggfunc=np.sum)
print(passenger_stats)

剔除无效数据

剔除无效数据 axis = 1 表示剔除变量(columns),等于 0 时表示剔除样本

drop_na_columns = titanic_train.dropna(axis=1)
print(titanic_train.shape)
print(drop_na_columns.shape)
new_titanic_survival = titanic_train.dropna(axis=0,subset=['Age','Sex'])
print(new_titanic_survival.shape)

读取指点位置数据

row_index_83_age = titanic_train.loc[83,'Age']
row_index_766_pclass = titanic_train.loc[766,'Pclass']
print(row_index_83_age)
print(row_index_766_pclass)

排序后对数据索引重新编号

new_titanic = titanic_train.sort_values('Age',ascending=False)
print(new_titanic[0:10])
new_titanic_reset_index = new_titanic.reset_index(drop=True)
print(new_titanic_reset_index[0:10])

Apply 函数复合操作

#输出第100个样本数据
def hundredth_row(columns): #参数为titanic_train类型的量
    hundredth_item = columns.loc[99]
    return hundredth_item

hundredth_row = titanic_train.apply(hundredth_row)
print(hundredth_row)

# 每个变量中缺失值的个数
def null_count(column):
    null_count_all = pd.isnull(column)
    null = column[null_count_all]
    return len(null)

null_count = titanic_train.apply(null_count)
print(null_count)

#输出未成年人数量
def bool_age(row):
    if row['Age'] < 18:
        return 'NA'
    elif row['Age'] >= 19:
        return  'A'
    else:
        return 'UN'
bool_age = titanic_train.apply(bool_age,axis=1)
print(len(bool_age[bool_age.values == 'NA'])) #输出未成年人数量

#输出是否成年对获救的影响
titanic_train['age_adult'] = bool_age
age_group_survival = titanic_train.pivot_table(index='age_adult',values='Survived')
print(age_group_survival)

Series操作(以titanic_test.csv为例)

Series类型

Series的类型为pandas.core.series.Series;Series.values的类型为 numpy.ndarray

data = pd.read_csv('titanic_test.csv')
series_name = data['Name']
print(type(series_name))
#print(series_x1[0:5])
print(type(series_name.values))

组建Series

from pandas import Series
series_custom = Series(data['Pclass'].values,index=series_name.values)
#print(data['Pclass'].values)
#print(series_name.values)
print(series_custom[["Myles, Mr. Thomas Francis","Wirz, Mr. Albert"]])
print(series_custom[5:10])

排序及筛选

排序类似于DataFrame数据的排序方式

sc = series_custom.sort_values()
print(sc)
sc - series_custom.sort_index()
print(sc)

筛选

series_custom_3 = series_custom[series_custom == 3]
print(series_custom_3)

Series计算操作

两个Series 纬度相同、index相同时、可以直接进行代数运算

#series_custom = Series(data['Pclass'].values,index=series_name.values)
print(series_custom-series_custom)

DataFrame索引操作

data = pd.read_csv('titanic_test.csv')
print(data.index)
data_name = data.set_index('Name',drop = False)
print(data_name.index)
#用重新设置的名字索引切片找数据(也可以用数字索引)
print(data_name[1:4])
print(data_name["Myles, Mr. Thomas Francis":"Abrahim, Mrs. Joseph (Sophie Halaut Easu)"])

小结

pandas从csv中读取的数据类型为DataFrame,DataFrame是由许多个Series组成的。Series中的数据实际上是numpy.ndarray类型的数据。说明pandas库的很多操作和numpy中的操作是类似的,两个有关联。pandas可以实现的数据预处理较多需要多实践。更多深入的功能在后续的案例中具体描述。

猜你喜欢

转载自blog.csdn.net/Droke_Zhou/article/details/87306785
今日推荐