pandas學習(數據分組與分組運算、離散化處理、數據合併)

pandas學習(數據分組與分組運算、離散化處理、數據合併)

目錄html

數據分組與分組運算

離散化處理

 數據合併python

 

 

 

數據分組與分組運算

GroupBy技術:實現數據的分組,和分組運算,做用相似於數據透視表

數據分組--〉概括

  

 

程序示例數組

import numpy as np
import pandas as pd
# 讀入數據
df=pd.read_csv('data1.txt')
print('原始數據')
print(df)

#返回一個對象

group=df.groupby(df['產地'])

#計算分組後的各個統計值
print('根據產地進行分組')
print(group.mean())
print(group.sum())


# 只計算某列的結果
print('根據年代進行分組,而後統計每個年代的平均評分')
print(df['評分'].groupby(df['年代']).mean())

#根據多個分組變量進行分組
print('多個分組變量進行分組')
print(df.groupby([df['產地'],df['年代']]).mean())

#得到每個地區,每年的電影的評分的均值
print('多個分組變量進行分組之操做某列')
print(df['評分'].groupby([df['產地'],df['年代']]).mean())

  

 

運行結果數據結構

原始數據
       名字    投票人數        類型    產地        上映時間   時長    年代   評分
0    美麗人生   42995  劇情/喜劇/愛情   意大利  1997-12-20  116  1997  9.5
1    阿甘正傳  580897     劇情/愛情    美國  1994-06-23  142  1994  9.4
2  肖申克的救贖  692795     劇情/犯罪    美國  1994-09-10  142  1994  9.6
3    控方證人   42995  劇情/懸疑/犯罪    美國  1957-12-17  116  1957  9.5
4    霸王別姬  478523  劇情/愛情/同性  中國大陸  1993-01-01  171  1993  9.4
根據產地進行分組 投票人數 時長 年代 評分 產地 中國大陸 478523.000000 171.000000 1993.000000 9.4 意大利 42995.000000 116.000000 1997.000000 9.5 美國 438895.666667 133.333333 1981.666667 9.5
投票人數 時長 年代 評分 產地 中國大陸 478523 171 1993 9.4 意大利 42995 116 1997 9.5 美國 1316687 400 5945 28.5

根據年代進行分組,而後統計每個年代的平均評分 年代 1957 9.5 1993 9.4 1994 9.5 1997 9.5 Name: 評分, dtype: float64

多個分組變量進行分組 投票人數 時長 評分 產地 年代 中國大陸 1993 478523 171 9.4 意大利 1997 42995 116 9.5 美國 1957 42995 116 9.5 1994 636846 142 9.5

多個分組變量進行分組之操做某列 產地 年代 中國大陸 1993 9.4 意大利 1997 9.5 美國 1957 9.5 1994 9.5 Name: 評分, dtype: float64

  

  

 

離散化處理

#在實際的數據分析項目中,對有數據屬性,咱們每每並非關注數據的絕對數值,只關注它所處的區間或者等級
# 好比,咱們能夠把評分9分及以上的電影定義爲A,7到9分爲B,5到7分定義爲C,3到5分定義爲D,小於3分定義爲E
#離散化也被稱爲分組,區間化
#pandas爲咱們提供了方便的函數cut()
# pandas.cut( x , bins , right=True , labels=None , retbins=False , precision=3 , include_lowest=False,duplicates='raise')
#  參數說明: 
#
#      x    : 進行劃分的一維數組;
#      bins :若是是整數---將x劃分爲多少個等間距的區間,如代碼一;
#      bins :若是是序列,則將x劃分在指定的序列中,若不在該序列中,則是NaN ,如代碼二;
#      right : 是否包含右端點;
#      labels : 是否用標記來代替返回的bins,如代碼三;
#      retbins: 是否返回間距bins,若是retbins = False 則返回x中每一個值對應的bin的列表,否者則返回x中每一個值對應的bin的列表和對應的bins;
#      precision: 精精度;
#      include_lowest:是否包含左端點; 

 

程序示例app

import numpy as np
import pandas as pd
# 讀入數據
df=pd.read_csv('data1.txt')
print('原始數據')
print(df)
data=pd.cut(df['評分'],[0,3,5,7,9,10],labels=['E','D','C','B','A'])
print(data)
df['等級']=data
print(df)

  

 

運行結果函數

原始數據
       名字    投票人數        類型    產地        上映時間   時長    年代   評分
0    美麗人生   42995  劇情/喜劇/愛情   意大利  1997-12-20  116  1997  9.5
1    阿甘正傳  580897     劇情/愛情    美國  1994-06-23  142  1994  9.4
2  肖申克的救贖  692795     劇情/犯罪    美國  1994-09-10  142  1994  9.6
3    控方證人   42995  劇情/懸疑/犯罪    美國  1957-12-17  116  1957  9.5
4    霸王別姬  478523  劇情/愛情/同性  中國大陸  1993-01-01  171  1993  9.4
0    A
1    A
2    A
3    A
4    A
Name: 評分, dtype: category
Categories (5, object): [E < D < C < B < A]
名字 投票人數 類型 產地 上映時間 時長 年代 評分 等級 0 美麗人生 42995 劇情/喜劇/愛情 意大利 1997-12-20 116 1997 9.5 A 1 阿甘正傳 580897 劇情/愛情 美國 1994-06-23 142 1994 9.4 A 2 肖申克的救贖 692795 劇情/犯罪 美國 1994-09-10 142 1994 9.6 A 3 控方證人 42995 劇情/懸疑/犯罪 美國 1957-12-17 116 1957 9.5 A 4 霸王別姬 478523 劇情/愛情/同性 中國大陸 1993-01-01 171 1993 9.4 A

 

 

 

 

數據合併

append(上下拼接)性能

import numpy as np
import pandas as pd
# 讀入數據
df=pd.read_csv('data1.txt')
print('原始數據')
print(df)

# (1)append(上下拼接)
# 先把數據集拆分爲多個,再進行合併
df_1=df[df.產地 =="美國"]
df_2=df[df.產地 == "中國大陸"]

df_3=df_1.append(df_2)#append()
print(df_3)

  

 

原始數據
       名字    投票人數        類型    產地        上映時間   時長    年代   評分
0    美麗人生   42995  劇情/喜劇/愛情   意大利  1997-12-20  116  1997  9.5
1    阿甘正傳  580897     劇情/愛情    美國  1994-06-23  142  1994  9.4
2  肖申克的救贖  692795     劇情/犯罪    美國  1994-09-10  142  1994  9.6
3    控方證人   42995  劇情/懸疑/犯罪    美國  1957-12-17  116  1957  9.5
4    霸王別姬  478523  劇情/愛情/同性  中國大陸  1993-01-01  171  1993  9.4

#合併後的數據 名字 投票人數 類型 產地 上映時間 時長 年代 評分 1 阿甘正傳 580897 劇情/愛情 美國 1994-06-23 142 1994 9.4 2 肖申克的救贖 692795 劇情/犯罪 美國 1994-09-10 142 1994 9.6 3 控方證人 42995 劇情/懸疑/犯罪 美國 1957-12-17 116 1957 9.5 4 霸王別姬 478523 劇情/愛情/同性 中國大陸 1993-01-01 171 1993 9.4

 

 

merge (左右合併)學習

# merge: 合併數據集, 經過left, right肯定鏈接字段,默認是兩個數據集相同的字段
# 參數 說明
# left 參與合併的左側DataFrame
# right 參與合併的右側DataFrame
# how 鏈接方式:‘inner’(默認);還有,‘outer’、‘left’、‘right’
# on 用於鏈接的列名,必須同時存在於左右兩個DataFrame對象中,若是位指定,則以left和right列名的交集做爲鏈接鍵
# left_on 左側DataFarme中用做鏈接鍵的列
# right_on 右側DataFarme中用做鏈接鍵的列
# left_index 將左側的行索引用做其鏈接鍵
# right_index 將右側的行索引用做其鏈接鍵
# sort 根據鏈接鍵對合並後的數據進行排序,默認爲True。有時在處理大數據集時,禁用該選項可得到更好的性能
# suffixes 字符串值元組,用於追加到重疊列名的末尾,默認爲(‘_x’,‘_y’).例如,左右兩個DataFrame對象都有‘data’,則結果中就會出現‘data_x’,‘data_y’
# copy 設置爲False,能夠在某些特殊狀況下避免將數據複製到結果數據結構中。默認老是賦值
# 」’
#有朋友總結了使用,因此直接引用了
# http://www.javashuo.com/article/p-vwqixfhp-de.html

 

 

 

 

concat():大數據

批量數據合併(兩個數據及以上)htm

上下合併

import numpy as np
import pandas as pd
# 讀入數據
df=pd.read_csv('data1.txt')
print('原始數據')
print(df)

# (1)append(上下拼接)
# 先把數據集拆分爲多個,再進行合併
df_1=df[df.產地 =="美國"]
df_2=df[df.產地 == "中國大陸"]

print(pd.concat([df_1,df_2]))

  

 

原始數據
       名字    投票人數        類型    產地        上映時間   時長    年代   評分
0    美麗人生   42995  劇情/喜劇/愛情   意大利  1997-12-20  116  1997  9.5
1    阿甘正傳  580897     劇情/愛情    美國  1994-06-23  142  1994  9.4
2  肖申克的救贖  692795     劇情/犯罪    美國  1994-09-10  142  1994  9.6
3    控方證人   42995  劇情/懸疑/犯罪    美國  1957-12-17  116  1957  9.5
4    霸王別姬  478523  劇情/愛情/同性  中國大陸  1993-01-01  171  1993  9.4
       名字    投票人數        類型    產地        上映時間   時長    年代   評分
1    阿甘正傳  580897     劇情/愛情    美國  1994-06-23  142  1994  9.4
2  肖申克的救贖  692795     劇情/犯罪    美國  1994-09-10  142  1994  9.6
3    控方證人   42995  劇情/懸疑/犯罪    美國  1957-12-17  116  1957  9.5
4    霸王別姬  478523  劇情/愛情/同性  中國大陸  1993-01-01  171  1993  9.4
相關文章
相關標籤/搜索