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數據分析與挖掘》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章