Python数据处理工具----pandas

从零开始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\\Administrator.SKY-20180518VHY\\Desktop\\shujufenxi\\第5章 Python数据处理工具--Pandas\\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\\Administrator.SKY-20180518VHY\\Desktop\\shujufenxi\\第5章 Python数据处理工具--Pandas\\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\\Administrator.SKY-20180518VHY\\Desktop\\shujufenxi\\第5章 Python数据处理工具--Pandas\\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)

在这里插入图片描述
下篇博客pandas之数据清洗

注:参考 刘顺祥《从零开始学Python数据分析与挖掘》

猜你喜欢

转载自blog.csdn.net/weixin_40123108/article/details/87863144