pandas 介绍

旧巷老猫 提交于 2020-02-27 05:51:47

1 .什么是pandas

Pandas是基于Numpy构建的库,在数据处理方面可以把它理解为numpy加强版,同时Pandas也是一项开源项目 。不同于numpy的是,pandas拥有种数据结构:Series和DataFrame.

a.Series是一种类似一维数组的数据结构,由一组数据和与之相关的index组成,这个结构一看似乎与dict字典差不多,我们知道字典是一种无序的数据结构,而pandas中的Series的数据结构不一样,它相当于定长有序的字典,并且它的index和value之间是独立的,两者的索引还是有区别的,Series的index是可变的,而dict字典的key值是不可变的。

from pandas import Series,DataFrame
import pandas as pd
data = Series([1,2,3,4],index= ['a','b','c','d'])
print(data)

b.DataFrame这种数据结构我们可以把它看作是一张二维表,DataFrame长得跟我们平时使用的Excel表格差不多,DataFrame的横行称为columns,竖列和Series一样称为index,DataFrame每一列可以是不同类型的值集合,所以DataFrame你也可以把它视为不同数据类型同一index的Series集合。

data2 = {'序号':[1,2,3],'姓名':['we','you','they'],'学校':['btc','eos','ae']}
df = DataFrame(data2)
print(df)

通过read_csv()方法读取数据,然后使用head()方法查看前 5 行数据。

df = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/telecom_churn.csv')
df.head()

让我们查看一下该数据库的维度、特征名称和特征类型。

df.shape 返回 (3333,20) 表示3333行,20列数据。

df.columns 返回所有列表

df['Churn'] = df['Churn'].astype('int64')  将Churn列数据的数据类型转换成int64

df.describe()方法可以显示数值特征(int64float64)的基本统计学特性,如未缺失值的数值、均值、标准差、范围、四分位数等

DataFrame 可以根据某个变量的值(也就是列)排序。比如,根据每日消费额排序(设置 ascending=False 倒序排列)。

df.sort_values(by='Total day charge', ascending=False).head()

如果是按多列排序: 先按 Churn 离网率 升序排列,再按 Total day charge 每日总话费 降序排列,优先级 Churn > Tatal day charge。

df.sort_values(by=['Churn', 'Total day charge'],  ascending=[True, False]).head()

2.使用示例

Adult 数据集是一个关于人口收入普查的数据集,其包含多个特征,目标值为类别类型。

import warnings import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt %matplotlib inline warnings.filterwarnings('ignore')

data = pd.read_csv( 'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv') data.head()

_ a.问题:_数据集中有多少男性和女性?

data['sex'].value_counts()

_b.问题:_数据集中女性的平均年龄是多少?

data[data['sex'] == 'Female']['age'].mean()

c. _问题:_数据集中德国公民的比例是多少?

float((data['native-country'] == 'Germany').sum()) / data.shape[0]

d. _问题:_年收入超过 50K 和低于 50K 人群年龄的平均值和标准差是多少?

ages1 = data[data['salary'] == '>50K']['age'] ages2 = data[data['salary'] == '<=50K']['age'] print("The average age of the rich: {0} +- {1} years, poor - {2} +- {3} years.".format( round(ages1.mean()), round(ages1.std(), 1), round(ages2.mean()), round(ages2.std(), 1)))

e. _问题:_年收入超过 50K 的人群是否都接受过高中以上教育?

data[data['salary'] == '>50K']['education'].unique()

f. _问题:_使用groupbydescribe统计不同种族和性别人群的年龄分布数据。

for (race, sex), sub_df in data.groupby(['race', 'sex']): print("Race: {0}, sex: {1}".format(race, sex)) print(sub_df['age'].describe())

g. _问题:_统计男性高收入人群中已婚和未婚(包含离婚和分居)人群各自所占数量

data[(data['sex'] == 'Male') & (data['marital-status'].isin(['Never-married', 'Separated', 'Divorced']))]['salary'].value_counts()

data[(data['sex'] == 'Male') & (data['marital-status'].str.startswith('Married'))]['salary'].value_counts()

h. _问题:_统计数据集中最长周工作小时数及对应的人数,并计算该群体中收入超过 50K 的比例。

max_load = data['hours-per-week'].max() print("Max time - {0} hours./week.".format(max_load))

num_workaholics = data[data['hours-per-week'] == max_load].shape[0] print("Total number of such hard workers {0}".format(num_workaholics))

rich_share = float(data[(data['hours-per-week'] == max_load) & (data['salary'] == '>50K')].shape[0]) / num_workaholics print("Percentage of rich among them {0}%".format(int(100 * rich_share)))

i. 计算各国超过和低于 50K 人群各自的平均周工作时长。

for (country, salary), sub_df in data.groupby(['native-country', 'salary']): print(country, salary, round(sub_df['hours-per-week'].mean(), 2))

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!