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)