1. 程式人生 > 其它 >pandas模組2

pandas模組2

Series資料操作

res = pd.Series([111,222,333,444])

res['a'] = 123

res.loc[1]

res[0] = 1

del res[0]

算數運算子

add    加(add)

sub    減(substract)

div     除(divide)

mul    乘(multipe)

sr1 = pd.Series([12,23,34], index=['c','a','d'])
sr3 = pd.Series([11,20,10,14], index=['d','c','a','b'])
sr1.add(sr3,fill_value
=0)

DataFrame建立方式

表格型資料結構,相當於一個二維陣列,含有一組有序的列也可以看做是右Series組成的共用一個索引的字典

pd.DataFrame({'username':['jason'],'pwd':[123]})

第一種

res = pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]})

第二種

pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']),
'two':pd.Series([1,2,3],index=['b','a','c'])})

第三種

pd.DataFrame(np.array([[10,20],[30,40]]),index=['a','b'],columns=['c1','c2'])

更多方法

pd.DataFrame([np.arange(1,8),np.arange(11,18)])
s1 = pd.Series(np.arange(1,9,2))
s2 = pd.Series(np.arange(2,10,2))
s3 = pd.Series(np.arange(5,7),index=[1,2])
df5 = pd.DataFrame({'c1':s1,'c2':s2,'c3':s3})

上述的建立方式僅僅是做一個瞭解就可以

在工作中DataFrame的資料一般都是來源於讀取外部的檔案資料

而不是自己去手動建立

常見屬性

1.index   行索引

2.columns 列索引

3.T   轉置

4.values 值索引

5.describle 快速統計

DataFrame資料型別補充

在DataFrame中所有的字元型別資料在檢視資料型別的時候都表示成object

讀取外部資料

pd.read_csv() 

可以讀取文字檔案和.csv結尾的檔案資料

pd.read_excel()  

可以讀取excel表格檔案資料

pd.read_sql()

可以讀取MySQL表格資料

pd.read_html() 

可以讀取頁面上table標籤內所有的資料

文字檔案讀取

pd.read_csv(filepath_or_buffer, sep=',',
header='infer', names=None, usecols=None,
skiprows=None, skipfooter=None, converters=None, encoding=None)

filepath_or_buffer:

指定txt檔案或csv檔案所在的具體路徑

sep:指定原資料集中各欄位之間的分隔符,預設為逗號”,”

id name income

1 jason 10

header:

是否需要將原資料集中的第一行作為表頭,預設將第一行用作欄位名稱

如果原始資料沒有表頭需要將該引數設定為None

names:

如果原資料集中沒有欄位,可以通過該引數在資料讀取時給資料框新增需要的表頭

usecols:

指定需要讀取原資料集中的哪些變數名

skipprows:

資料讀取時,指定需要跳過原資料集開頭的行數

有一些表格開頭是有幾行文字說明的,讀取時應該跳過

skipfooter:

讀取資料時,指定需要跳過原資料末尾的行數

converters:

用於資料型別的轉換(以字典的形式指定)

encoding:

如果檔案中含有中文,有時需要指定字元編碼

基本使用

import pandas as pd
data01 = pd.read_csv(r'data_test01.txt',
           skiprows = 2,  # python能自動過濾掉完全無內容的空行(寫2、3都行)
           sep = ',',  # 預設就是逗號 寫不寫都行 
           skipfooter = 3, 
           )
# 1.針對id原本是01、02自動變成了1、2...
converters = {'id':str}
# 2.點選檔案另存修改檔案編碼之後再次讀取出現亂碼
encoding='utf-8'
# 3.移除收入千分位非逗號的其他符號
thousands = '&'
# 4.手動將檔案表頭行刪除再次讀取
header = None  # 預設用索引
names = ['id','year','month','day','gender','occupation','income']
# 5.指定讀取的欄位
usecols = ['id','income']

excel表格讀取

pd.read_excel(io, sheetname=0, header=0, skiprows=None, 
skip_footer=0, index_col=None, names=None, na_values=None, thousands=None, convert_float=True)

io:指定電子表格的具體路徑

sheet—name:指定需要讀取電子表格中的第幾個Sheet,既可以傳遞整數也可以傳遞具體的Sheet名稱

header:是否需要將資料集的第一行用作表頭,預設為是需要的

skiprows:讀取資料時,指定跳過的開始行數

skip_footer:讀取資料時,指定跳過的末尾行數

index_col:指定哪些列用作資料框的行索引(標籤)

na_values:指定原始資料中哪些特殊值代表了缺失值

thousands:指定原始資料集中的千分位符

convert_float:預設將所有的數值型欄位轉換為浮點型欄位

converters:通過字典的形式,指定某些列需要轉換的形式

pd.read_excel(r'data_test02.xlsx',
             header = None,
              names = ['ID','Product','Color','Size'], 
             converters = {'ID':str}
             )

資料庫資料讀取

在anaconda環境下直接安裝

pymysql模組

import pymysql
conn = pymysql.connect(host,port,user,password, database, charset)

利用pymysql建立好的MySQL的連結之後即可通過該連結操作MySQL

import pymysql
conn = pymysql.connect(host,port,user,password, database, charset)

網頁表格資料讀取

pd.read_html(r'https://baike.baidu.com/item/NBA%E6%80%BB%E5%86%A0%E5%86%9B/2173192?fr=aladdin')

直接將網頁的url輸入就會直接拿到裡面的table標籤的資料

資料概覽

df.columns  # 檢視列 
df.index      # 檢視行
df.shape    # 行列 
df.dtypes      # 資料型別 
df.head()      # 取頭部多條資料
df.tail()      # 取尾部多條資料

行列操作

獲取指定列對應的資料

df['列欄位名詞']

更改列名稱

df.rename(column={'舊列名稱':'新列名稱'})

建立新的列

df['新列名稱']=df.列名稱/(df.列名稱1+df.列名稱2)

自定義位置

df.insert(3,'新列名稱',新資料)

新增行

df3 = df1.append(df2)

資料篩選

獲取指定列資料

df['列名']  # 單列資料
df[['列名1','列名2',...]]  # 多列資料

獲取指定行資料

sec_buildings.loc[sec_buildings["region"] == '浦東']

sec_buildings.loc[(sec_buildings["region"] == '浦東') & (sec_buildings['size'] > 150),]

sec_buildings.loc[(sec_buildings["region"] == '浦東') & (sec_buildings['size'] > 150),['name','tot_amt','price_unit']]

資料處理

sec_car = pd.read_csv(r'sec_cars.csv')
sec_car.head()
sec_car.dtypes
sec_car.Boarding_time = pd.to_datetime(sec_car.Boarding_time, format = '%Y年%m月')


sec_car.New_price = sec_car.New_price.str[:-1].astype(float)