精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
數據分析實戰(5)

Series 是個定長的字典序列。

說是定長是因為在存儲的時候,相當于兩個 ndarray,這也是和字典結構最大的不同。因為在字典的結構里,元素的個數是不固定的。 Series 有兩個基本屬性:index 和 values。在 Series 結構中,index 默認是 0,1,2,……遞增的整數序列,當然我們也可以自己來指定索引,比如 index=['a’, 'b’, 'c’, 'd’]。

!pip3 install pandas -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
# 創建series
import pandas as pd
from pandas import Series, DataFrame
## index 采用的是默認值
x1 = Series([1,2,3,4])
## index 進行了指定
x2 = Series(data=[1,2,3,4], index=['a', 'b', 'c', 'd'])
print(x1)
print(x2)
# 采用字典的方式來創建 Series
d = {'a':1, 'b':2, 'c':3, 'd':4}
x3 = Series(d)
print (x3)
0    1
1    2
2    3
3    4
dtype: int64
a    1
b    2
c    3
d    4
dtype: int64
a    1
b    2
c    3
d    4
dtype: int64

DataFrame 類型數據結構類似數據庫表

它包括了行索引和列索引,我們可以將 DataFrame 看成是由相同索引的 Series 組成的字典類型。

import pandas as pd
from pandas import Series, DataFrame
data = {'Chinese': [66, 95, 93, 90,80],'English': [65, 85, 92, 88, 90],'Math': [30, 98, 96, 77, 90]}
## 相當于把每個列基于同樣地index序列化,index有點類似于主鍵??應該也可以取不唯一
df1= DataFrame(data)
df2 = DataFrame(data, index=['ZhangFei', 'GuanYu', 'ZhaoYun', 'HuangZhong', 'DianWei'], columns=['English', 'Math', 'Chinese'])
print(df1)
print(df2)
   Chinese  English  Math
0       66       65    30
1       95       85    98
2       93       92    96
3       90       88    77
4       80       90    90
            English  Math  Chinese
ZhangFei         65    30       66
GuanYu           85    98       95
ZhaoYun          92    96       93
HuangZhong       88    77       90
DianWei          90    90       80

數據處理?

數據導入和輸出

Pandas 允許直接從 xlsx,csv 等文件中導入數據,也可以輸出到 xlsx, csv 等文件,非常方便。

import pandas as pd
from pandas import Series, DataFrame
score = DataFrame(pd.read_excel('data.xlsx'))
score.to_excel('data1.xlsx')
print(score)
# 報錯
XLRDError: Excel xlsx file; not supported

XLRDError: Excel xlsx file; not supported報錯解決:

參考https://blog.csdn.net/weixin_44073728/article/details/111054157
pandas無法打開.xlsx文件,xlrd.biffh.XLRDError: Excel xlsx file; not supported
原因是最近xlrd更新到了2.0.1版本,只支持.xls文件。所以pandas.read_excel('xxx.xlsx’)會報錯。

可以安裝舊版xlrd,在cmd中運行:
pip uninstall xlrd
pip install xlrd==1.2.0  ##此方法解決不了

也可以用openpyxl代替xlrd打開.xlsx文件:
df=pandas.read_excel('data.xlsx’,engine='openpyxl’) ##可行

編輯data.xlsx上傳

import pandas as pd
from pandas import Series, DataFrame
score = pd.read_excel('data.xlsx',engine='openpyxl')
score.to_excel('data1.xlsx')
print(score)

   66  65  30
0  95  85  98
1  93  92  96
2  90  88  77
3  80  90  90

發現會把Excel的首行首列讀成行列index,重新編輯上傳,執行結果:

原來只會識別列名,每行如果不指定index還是會默認生成

   Unnamed: 0  English  Math  Chinese
0    ZhangFei       66    65       30
1      GuanYu       95    85       98
2     ZhaoYun       93    92       96
3  HuangZhong       90    88       77
4     DianWei       80    90       90

數據清洗

數據清洗是數據準備過程中必不可少的環節,Pandas 也為我們提供了數據清洗的工具,在后面數據清洗的章節中會給你做詳細的介紹,這里簡單介紹下 Pandas 在數據清洗中的使用方法。

import numpy as np
data = {'Chinese': [66, 95, 93, 90,80],'English': [65, 85, 92, 88, 90],'Math': [30, 98, 96, 77, 90]}
df = DataFrame(data, index=['ZhangFei', 'GuanYu', 'ZhaoYun', 'HuangZhong', 'DianWei'], columns=['English', 'Math', 'Chinese'])

## 1. drop()刪除 DataFrame 中的不必要的列或行
df1 = df.drop(columns=['Chinese'])
df2 = df.drop(index=['ZhangFei'])
print(df2)

## 2.rename(columns=new_names, inplace=True)重命名列名 columns,讓列表名更容易識別
df2.rename(columns={'Chinese': 'YuWen', 'English': 'Yingyu'}, inplace = True)

## 3.drop_duplicates()去重復的行
df3=df.drop_duplicates()
print(df1)
print(df2)
print(df3)

## 4.astype更改數據格式
df2['YuWen'].astype('str') 
##df2['YuWen'].astype(np.int64) 
print(df2)

## 5.strip刪除數據間的空格/指定字符
#  df2['YuWen']=df2['YuWen'].map(str.strip)
#  df2['YuWen']=df2['YuWen'].map(str.lstrip)
#  df2['YuWen']=df2['YuWen'].map(str.rstrip)
#  df2['YuWen']=df2['YuWen'].str.strip('$')

## 6.大小寫轉換
df2.columns = df2.columns.str.upper()
df2.columns = df2.columns.str.lower()
df2.columns = df2.columns.str.title()

## 7.isnull()查找空值
## 查看哪個地方存在空值 NaN,可以針對數據表 df 進行 df.isnull()
## 想知道哪列存在空值,可以使用 df.isnull().any()

## 8.apply 函數對數據進行清洗
##  大小寫轉換df['name'] = df['name'].apply(str.upper)
##  apply函數應用
def double_df(x):
           return 2*x
df1['English'] = df1['English'].apply(double_df)
## apply復雜函數應用
def plus(df,n,m):
    df['new1'] = (df['English'] df['Math']) * m
    df['new2'] = (df['English'] df['Math']) * n
    return df
print(df1.apply(plus,axis=1,args=(2,3,)))   # 注意這里axis=0運行不了的
# 其中 axis=1 代表按照列為軸進行操作,axis=0 代表按照行為軸進行操作,args 是傳遞的兩個參數,即 n=2, m=3,在 plus 函數中使用到了 n 和 m,從而生成新的 df。
            English  Math  Chinese
GuanYu           85    98       95
ZhaoYun          92    96       93
HuangZhong       88    77       90
DianWei          90    90       80
            English  Math
ZhangFei         65    30
GuanYu           85    98
ZhaoYun          92    96
HuangZhong       88    77
DianWei          90    90
            Yingyu  Math  YuWen
GuanYu          85    98     95
ZhaoYun         92    96     93
HuangZhong      88    77     90
DianWei         90    90     80
            English  Math  Chinese
ZhangFei         65    30       66
GuanYu           85    98       95
ZhaoYun          92    96       93
HuangZhong       88    77       90
DianWei          90    90       80
            Yingyu  Math  YuWen
GuanYu          85    98     95
ZhaoYun         92    96     93
HuangZhong      88    77     90
DianWei         90    90     80
            English  Math  new1  new2
ZhangFei        130    30   480   320
GuanYu          170    98   804   536
ZhaoYun         184    96   840   560
HuangZhong      176    77   759   506
DianWei         180    90   810   540

數據統計

在數據清洗后,我們就要對數據進行統計了。Pandas 和 NumPy 一樣,都有常用的統計函數,如果遇到空值 NaN,會自動排除。

 

# 統計函數千千萬,describe() 函數最簡便。它是個統計大禮包,可以快速讓我們對數據有個全面的了解。
df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
print(df1)
print(df1.describe())
       name  data1
0  ZhangFei      0
1    GuanYu      1
2         a      2
3         b      3
4         c      4
          data1
count  5.000000
mean   2.000000
std    1.581139
min    0.000000
25%    1.000000
50%    2.000000
75%    3.000000
max    4.000000

數據表合并

有時候我們需要將多個渠道源的多個數據表進行合并,一個 DataFrame 相當于一個數據庫的數據表,那么多個 DataFrame 數據表的合并就相當于多個數據庫的表合并

# 創建兩個dataframe
df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
df2 = DataFrame({'name':['ZhangFei', 'GuanYu', 'A', 'B', 'C'], 'data2':range(5)})

## 1.基于指定列連接
df3 = pd.merge(df1, df2, on='name')
print(df3)

## 2.內連接:inner 內鏈接是 merge 合并的默認情況,inner 內連接其實也就是鍵的交集,在這里 df1, df2 相同的鍵是 name,所以是基于 name 字段做的連接
df3 = pd.merge(df1, df2, how='inner')
print(df3)

## 3.左連接
df3 = pd.merge(df1, df2, how='left')
print(df3)

## 4.右連接
df3 = pd.merge(df1, df2, how='right')
print(df3)

## 5.外連接
df3 = pd.merge(df1, df2, how='outer')
print(df3)
       name  data1  data2
0  ZhangFei      0      0
1    GuanYu      1      1
       name  data1  data2
0  ZhangFei      0      0
1    GuanYu      1      1
       name  data1  data2
0  ZhangFei      0    0.0
1    GuanYu      1    1.0
2         a      2    NaN
3         b      3    NaN
4         c      4    NaN
       name  data1  data2
0  ZhangFei    0.0      0
1    GuanYu    1.0      1
2         A    NaN      2
3         B    NaN      3
4         C    NaN      4
       name  data1  data2
0  ZhangFei    0.0    0.0
1    GuanYu    1.0    1.0
2         a    2.0    NaN
3         b    3.0    NaN
4         c    4.0    NaN
5         A    NaN    2.0
6         B    NaN    3.0
7         C    NaN    4.0

如何用 SQL 方式打開 Pandas?

工具:pandasql。 pandasql 中的主要函數是 sqldf,它接收兩個參數:一個 SQL 查詢語句,還有一組環境變量 globals() 或 locals()。這樣我們就可以在 Python 里,直接用 SQL 語句中對 DataFrame 進行操作,舉個例子:

!pip3 install pandasql -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
import pandas as pd
from pandas import DataFrame
from pandasql import sqldf, load_meat, load_births
df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
pysqldf = lambda sql: sqldf(sql, globals())
sql = 'select * from df1 where name ='ZhangFei''
print(pysqldf(sql))
       name  data1
0  ZhangFei      0

TIPS:lambda函數

lambda argument_list: expression

lambda 實際上是用來定義一個匿名函數的,argument_list 是參數列表,expression 是關于參數的表達式,會根據 expression 表達式計算結果進行輸出返回。

作業

對于下表的數據,請使用 Pandas 中的 DataFrame 進行創建,并對數據進行清洗。同時新增一列“總和”計算每個人的三科成績之和

 

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import pandas as pd

data = {'Chinese': [66, 95, 93, 90, 80, 80], 'English': [65, 85, 92, 88, 90, 90],
        'Math': [None, 98, 96, 77, 90, 90]}
df = pd.DataFrame(data, index=['張飛', '關羽', '趙云', '黃忠', '典韋', '典韋'],
                  columns=['English', 'Math', 'Chinese'])
# 去除重復行
df = df.drop_duplicates()
# 列名重新排序
cols = ['Chinese', 'English', 'Math']
df = df.filter(cols, axis=1)
# 列名改為中文
df.rename(columns={'Chinese': '語文', 'English': '英語',
                   'Math': '數學'}, inplace=True)

def total_score(df):
    df['總分'] = df['語文']   df['英語']   df['數學']
    return df

# 求成績的和,用老師講的 apply 方法,也可以用df['Total'] = df.sum(axis=1) 
df = df.apply(total_score, axis=1)
# 或者可以用這個方法求和
# df['總分'] = df['語文']   df['英語']   df['數學']
# 按照總分排序,從高到低,此時有缺失值
df.sort_values(['總分'], ascending=[False], inplace=True)
# 打印顯示成績單信息,張飛有空值
print(df.isnull().sum())
print(df.describe())
print(df)

# 使用數學成績均值填充張飛同學的缺失值
df['數學'].fillna(df['數學'].mean(), inplace=True)
# 再次求成績的和并打印顯示成績單情況
df = df.apply(total_score, axis=1)
print(df.isnull().sum())
print(df.describe())
print(df)
語文    0
英語    0
數學    1
總分    1
dtype: int64
              語文         英語         數學          總分
count   5.000000   5.000000   4.000000    4.000000
mean   84.800000  84.000000  90.250000  268.500000
std    11.987493  10.931606   9.464847   12.922848
min    66.000000  65.000000  77.000000  255.000000
25%    80.000000  85.000000  86.750000  258.750000
50%    90.000000  88.000000  93.000000  269.000000
75%    93.000000  90.000000  96.500000  278.750000
max    95.000000  92.000000  98.000000  281.000000
      語文    英語    數學     總分
趙云  93.0  92.0  96.0  281.0
關羽  95.0  85.0  98.0  278.0
典韋  80.0  90.0  90.0  260.0
黃忠  90.0  88.0  77.0  255.0
張飛  66.0  65.0   NaN    NaN
語文    0
英語    0
數學    0
總分    0
dtype: int64
              語文         英語         數學          總分
count   5.000000   5.000000   5.000000    5.000000
mean   84.800000  84.000000  90.250000  259.050000
std    11.987493  10.931606   8.196798   23.911556
min    66.000000  65.000000  77.000000  221.250000
25%    80.000000  85.000000  90.000000  255.000000
50%    90.000000  88.000000  90.250000  260.000000
75%    93.000000  90.000000  96.000000  278.000000
max    95.000000  92.000000  98.000000  281.000000
      語文    英語     數學      總分
趙云  93.0  92.0  96.00  281.00
關羽  95.0  85.0  98.00  278.00
典韋  80.0  90.0  90.00  260.00
黃忠  90.0  88.0  77.00  255.00
張飛  66.0  65.0  90.25  221.25
本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
為什么pandas讀取出來的表格 empty dataframe
利用python實現微信好友分析(簡單)
Python玩轉Excel:實現多表聯合
pandas小記:pandas索引和選擇
Python 數據分析包:pandas 基礎
《Python數據分析常用手冊》一、NumPy和Pandas篇
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 阿拉善左旗| 嘉义县| 任丘市| 库尔勒市| 新宁县| 建瓯市| 广平县| 枣庄市| 萨迦县| 桐城市| 龙山县| 渝北区| 鹤庆县| 汽车| 卢龙县| 浮梁县| 滨州市| 韶关市| 茂名市| 新津县| 扶绥县| 江川县| 遂川县| 周口市| 济源市| 绥芬河市| 宝丰县| 清丰县| 观塘区| 乌兰县| 通海县| 广昌县| 乌拉特前旗| 四平市| 静海县| 宜君县| 天柱县| 罗定市| 宜阳县| 台南市| 剑河县|