中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

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

開通VIP
數(shù)據分析實戰(zhàn)(5)

Series 是個定長的字典序列。

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

!pip3 install pandas -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
# 創(chuàng)建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)
# 采用字典的方式來創(chuàng)建 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 類型數(shù)據結構類似數(shù)據庫表

它包括了行索引和列索引,我們可以將 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

數(shù)據處理?

數(shù)據導入和輸出

Pandas 允許直接從 xlsx,csv 等文件中導入數(shù)據,也可以輸出到 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

發(fā)現(xiàn)會把Excel的首行首列讀成行列index,重新編輯上傳,執(zhí)行結果:

原來只會識別列名,每行如果不指定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

數(shù)據清洗

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

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更改數(shù)據格式
df2['YuWen'].astype('str') 
##df2['YuWen'].astype(np.int64) 
print(df2)

## 5.strip刪除數(shù)據間的空格/指定字符
#  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,可以針對數(shù)據表 df 進行 df.isnull()
## 想知道哪列存在空值,可以使用 df.isnull().any()

## 8.apply 函數(shù)對數(shù)據進行清洗
##  大小寫轉換df['name'] = df['name'].apply(str.upper)
##  apply函數(shù)應用
def double_df(x):
           return 2*x
df1['English'] = df1['English'].apply(double_df)
## apply復雜函數(shù)應用
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 是傳遞的兩個參數(shù),即 n=2, m=3,在 plus 函數(shù)中使用到了 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

數(shù)據統(tǒng)計

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

 

# 統(tǒng)計函數(shù)千千萬,describe() 函數(shù)最簡便。它是個統(tǒng)計大禮包,可以快速讓我們對數(shù)據有個全面的了解。
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

數(shù)據表合并

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

# 創(chuàng)建兩個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 中的主要函數(shù)是 sqldf,它接收兩個參數(shù):一個 SQL 查詢語句,還有一組環(huán)境變量 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函數(shù)

lambda argument_list: expression

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

作業(yè)

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

 

#!/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': '數(shù)學'}, inplace=True)

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

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

# 使用數(shù)學成績均值填充張飛同學的缺失值
df['數(shù)學'].fillna(df['數(shù)學'].mean(), inplace=True)
# 再次求成績的和并打印顯示成績單情況
df = df.apply(total_score, axis=1)
print(df.isnull().sum())
print(df.describe())
print(df)
語文    0
英語    0
數(shù)學    1
總分    1
dtype: int64
              語文         英語         數(shù)學          總分
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
      語文    英語    數(shù)學     總分
趙云  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
數(shù)學    0
總分    0
dtype: int64
              語文         英語         數(shù)學          總分
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
      語文    英語     數(shù)學      總分
趙云  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
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
為什么pandas讀取出來的表格 empty dataframe
利用python實現(xiàn)微信好友分析(簡單)
Python玩轉Excel:實現(xiàn)多表聯(lián)合
pandas小記:pandas索引和選擇
Python 數(shù)據分析包:pandas 基礎
《Python數(shù)據分析常用手冊》一、NumPy和Pandas篇
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服