python数据分析第三章_第三章:Python数据处理工具——pandas

免责声明:本文是通过网络收集并结合自身学习等途径合法获取,仅作为学习交流使用,其版权归出版社或者原创作者所有,并不对涉及的版权问题负责。若原创作者或者出版社认为侵权,请联系及时联系,我将立即删除文章,十分感谢!

注:来源刘顺祥《从零开始学Python数据分析与挖掘》,版权归原作者所有,仅供学习使用,不用于商业用途,如有侵权请留言联系删除,感谢合作。

从零开始python数据分析与挖掘Python数据数据处理工具----pandas

import pandas as pd

构造序列

import numpy as np

gdp1 = pd.Series([2,3.01,8.99,8.59,5.18])

gdp2 = pd.Series({'北京':2.8,'上海':3.01,'广东':8.99,'江苏':8.59,'浙江':5.18})

gdp3 = pd.Series(np.array((2.8,3.01,8.99,8.59,5.18)))

print(gdp1.shape)

print(gdp2)

print(gdp3)

# 取出gdp1中的第一、第四和第五个元素

print('行号风格的序列:\n',gdp1[[0,3,4]])

# 取出gdp2中的第一、第四和第五个元素

print('行名称风格的序列:\n',gdp2[[0,3,4]])

# 取出gdp2中上海、江苏和浙江的GDP值

print('行名称风格的序列:\n',gdp2[['上海','江苏','浙江']])

# 数学函数--取对数

print('通过numpy函数:\n',np.log(gdp1))

# 平均gdp

print('通过numpy函数:\n',np.mean(gdp1))

print('通过序列的方法:\n',gdp1.mean())

构造数据框

df1 = pd.DataFrame([['张三',23,'男'],['李四',27,'女'],['王二',26,'女']])

df2 = pd.DataFrame({'姓名':['张三','李四','王二'],'年龄':[23,27,26],'性别':['男','女','女']})

df3 = pd.DataFrame(np.array([['张三',23,'男'],['李四',27,'女'],['王二',26,'女']]))

print('嵌套列表构造数据框:\n',df1)

print('字典构造数据框:\n',df2)

print('二维数组构造数据框:\n',df3)

# 读取文本文件中的数据

user_income = pd.read_table('C:\\Users\\Desktop\\data_test01.txt', sep = ',',

parse_dates={'birthday':[0,1,2]},skiprows=2, skipfooter=3,engine='python',

comment='#', encoding='utf8', thousands='&')

print(user_income)

child_cloth = pd.read_excel(io = 'C:\\Users\\Desktop\\data_test02.xlsx', header = None,

names = ['Prod_Id','Prod_Name','Prod_Color','Prod_Price'], converters = {0:str})

print(child_cloth)

数据类型转换及描述统计

#数据读取

sec_cars = pd.read_csv('C:\\Users\\Administrator.SKY-20180518VHY\\Desktop\\shujufenxi\\第5章 Python数据处理工具--Pandas\\sec_cars.csv',engine='python',sep=',',

encoding='utf8')

# 预览数据的前五行

print(sec_cars.head())

# 查看数据的行列数

print('数据集的行列数:\n',sec_cars.shape)

# 查看数据集每个变量的数据类型

print('各变量的数据类型:\n',sec_cars.dtypes)

# 修改二手车上牌时间的数据类型

sec_cars.Boarding_time = pd.to_datetime(sec_cars.Boarding_time, format = '%Y年%m月')

# 修改二手车新车价格的数据类型

sec_cars.New_price = sec_cars.New_price.str[:-1].astype('float')

# 重新查看各变量数据类型

print(sec_cars.dtypes)

import numpy as np

print(np.max(sec_cars.New_price))

# 数据的描述性统计

print(sec_cars.describe())

# 数据的形状特征

# 挑出所有数值型变量

num_variables = sec_cars.columns[sec_cars.dtypes !='object'][1:]

print(num_variables)

#自定义函数,计算偏度和峰度

def skew_kurt(x):

skewness = x.skew()

kurtsis = x.kurt()

# 返回偏度值和峰度值

return pd.Series([skewness,kurtsis], index = ['Skew','Kurt'])

# 运用apply方法

print(sec_cars[num_variables].apply(func = skew_kurt, axis = 0))

#离散型变量的统计描述

print(sec_cars.describe(include = ['object']))

#离散变量频次统计

Freq = sec_cars.Discharge.value_counts()

Freq_ratio = Freq/sec_cars.shape[0]

Freq_df = pd.DataFrame({'Freq':Freq,'Freq_ratio':Freq_ratio})

print(Freq_df.head())

# 将行索引重设为变量

Freq_df.reset_index(inplace = True)

print(Freq_df.head())

字符与日期数据的处理

数据集

# 数据读入

df = pd.read_excel('C:\\Users\Desktop\\data_test03.xlsx')

# 各变量数据类型

print(df.dtypes)

# 将birthday变量转换为日期型

df.birthday = pd.to_datetime(df.birthday, format = '%Y/%m/%d')

# 将手机号转换为字符串

df.tel = df.tel.astype('str')

# 新增年龄和工龄两列

df['age'] = pd.datetime.today().year - df.birthday.dt.year

df['workage'] = pd.datetime.today().year - df.start_work.dt.year

# 将手机号中间四位隐藏起来

df.tel = df.tel.apply(func = lambda x : x.replace(x[3:7], '****'))

# 取出邮箱的域名

df['email_domain'] = df.email.apply(func = lambda x : x.split('@')[1])

# 取出用户的专业信息

df['profession'] = df.other.str.findall('专业:(.*?),')

# 去除birthday、start_work和other变量

df.drop(['birthday','start_work','other'], axis = 1, inplace = True)

print(df.head())

# 常用日期处理方法

dates = pd.to_datetime(pd.Series(['1989-8-18 13:14:55','1995-2-16']), format = '%Y-%m-%d %H:%M:%S')

print('返回日期值:\n',dates.dt.date)

print('返回季度:\n',dates.dt.quarter)

print('返回几点钟:\n',dates.dt.hour)

print('返回年中的天:\n',dates.dt.dayofyear)

print('返回年中的周:\n',dates.dt.weekofyear)

print('返回星期几的名称:\n',dates.dt.weekday_name)

print('返回月份的天数:\n',dates.dt.days_in_month)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值