數(shù)據(jù)結(jié)構(gòu):Series 和 DataFrame
一維的序列和二維的表結(jié)構(gòu)
import pandas as pd
from pandas import Series, DataFrame
x1 = Series([1,2,3,4])
x2 = Series(data=[1,2,3,4], index=['a', 'b', 'c', 'd'])? ? ? ? #兩個特性里伯,value和index辕狰,index默認為0,1,2,3
print (x1)
print (x2)
d = {'a':1, 'b':2, 'c':3, 'd':4}? ? ? ? #用字典的方法創(chuàng)建series
x3 = Series(d)
print (x3)
DataFrame 類型數(shù)據(jù)結(jié)構(gòu)類似數(shù)據(jù)庫表
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]}? #行索引
df1= DataFrame(data)
df2 = DataFrame(data, index=['ZhangFei', 'GuanYu', 'ZhaoYun', 'HuangZhong', 'DianWei'], columns=['English', 'Math', 'Chinese']) #列索引
print (df1)
print (df2)
數(shù)據(jù)導入和輸出
import pandas as pd
from pandas import Series, DataFrame
score = DataFrame(pd.read_excel('Desktop\data.xls'))? ? #windows不要用絕對路徑漾稀,用相對路徑
score.to_excel('Desktop\data.xls')
print (score)
在運行的過程可能會存在缺少 xlrd 和 openpyxl 包的情況头滔,到時候如果缺少了,可以在命令行模式下使用“pip install”命令來進行安裝腹缩。
數(shù)據(jù)清洗
刪除 DataFrame 中的不必要的列或行
data = {'Chinese': [66, 95, 93, 90,80],'English': [65, 85, 92, 88, 90],'Math': [30, 98, 96, 77, 90]}
df2 = DataFrame(data, index=['ZhangFei', 'GuanYu', 'ZhaoYun', 'HuangZhong', 'DianWei'], columns=['English', 'Math', 'Chinese'])
df2 = df2.drop(columns=['Chinese'])
df2 = df2.drop(index=['ZhangFei'])
重命名列名 columns鹃愤,讓列表名更容易識別
df2.rename(columns={'Chinese': 'YuWen', 'English': 'Yingyu'}, inplace = True)
去重復的值
df = df.drop_duplicates()? ? # 去除重復行
更改數(shù)據(jù)格式
df2['Chinese'].astype('str')?
df2['Chinese'].astype(np.int64)
數(shù)據(jù)間的空格
# 刪除左右兩邊空格
?df2['Chinese']=df2['Chinese'].map(str.strip)
?# 刪除左邊空格
?df2['Chinese']=df2['Chinese'].map(str.lstrip)
?# 刪除右邊空格
?df2['Chinese']=df2['Chinese'].map(str.rstrip)
#刪除特殊符號,$
df2['Chinese']=df2['Chinese'].str.strip('$')
大小寫轉(zhuǎn)換
# 全部大寫
?df2.columns = df2.columns.str.upper()?
# 全部小寫
df2.columns = df2.columns.str.lower()
# 首字母大寫
df2.columns = df2.columns.str.title()
查找空值
用isnull函數(shù)峦甩,想看下哪個地方存在空值 NaN,可以針對數(shù)據(jù)表 df 進行 df.isnull()现喳,想知道哪列存在空值凯傲,可以使用 df.isnull().any()。
使用 apply 函數(shù)對數(shù)據(jù)進行清洗
df['name'] = df['name'].apply(str.upper)? ?#對 name 列的數(shù)值都進行大寫轉(zhuǎn)化
我們也可以定義個函數(shù)嗦篱,在 apply 中進行使用冰单。比如定義 double_df 函數(shù)是將原來的數(shù)值 *2 進行返回。然后對 df1 中的“語文”列的數(shù)值進行 *2 處理灸促,可以寫成:
def double_df(x):?
????return 2*x
?df1[u'語文'] = df1[u'語文'].apply(double_df)
我們也可以定義更復雜的函數(shù)诫欠,比如對于 DataFrame涵卵,我們新增兩列,其中’new1’列是“語文”和“英語”成績之和的 m 倍荒叼,'new2’列是“語文”和“英語”成績之和的 n倍轿偎,我們可以這樣寫:
def plus(df,n,m):?
????df['new1'] = (df[u'語文']+df[u'英語']) * m
?????df['new2'] = (df[u'語文']+df[u'英語']) * n?
????return df?
df1 = df1.apply(plus,axis=1,args=(2,3,))? ? #axis=1 代表按照列為軸進行操作,axis=0 代表按照行為軸進行操作被廓,args 是傳遞的
????????????????????????????????????????????????????????????????????兩個參數(shù)坏晦,即 n=2, m=3
數(shù)據(jù)統(tǒng)計
describe()函數(shù)是一個大禮包,會輸出cout mean std min max 25% 50%〖蕹恕75%
df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
print? (df1.describe())
數(shù)據(jù)表合并
df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
df2 = DataFrame({'name':['ZhangFei', 'GuanYu', 'A', 'B', 'C'], 'data2':range(5)})
數(shù)據(jù)表合并用merge()昆婿,有五種形式
基于指定列進行連接
df3 = pd.merge(df1, df2, on='name')? #基于 name 這列進行連接,把name這列亦渗,相同的整合到df3中
inner 內(nèi)連接
df3 = pd.merge(df1, df2, how='inner')? ?#inner 內(nèi)鏈接是 merge 合并的默認情況挖诸,inner 內(nèi)連接其實也就是鍵的交集,在這里 df1,
????????????????????????????????????????????????????????????????df2 相同的鍵是 name法精,所以是基于 name 字段做的連接
left 左連接
df3 = pd.merge(df1, df2, how='left')? ?#左連接是以第一個 DataFrame 為主進行的連接多律,第二個 DataFrame 作為補充。
right 右連接
df3 = pd.merge(df1, df2, how='right')? ?#右連接是以第二個 DataFrame 為主進行的連接搂蜓,第一個 DataFrame 作為補充狼荞。
outer 外連接
df3 = pd.merge(df1, df2, how='outer')? #外連接相當于求兩個 DataFrame 的并集。?
如何用 SQL 方式打開 Pandas?
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 ='a'"
print (pysqldf(sql))