series數據操作
import pandas as pd 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 乘(multiple)
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組成的共用一個索引的字典
第一種
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.colums 列索引
3.T 轉置
4.values 值索引
5.describe 快速統計
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:指定需要讀取讀數據集中的哪些變量名
skiprows:數據讀取時,指定需要跳過原數據集開頭的行數
(有一些表格開頭是有幾行文字說明的,讀取的時候應該跳過)
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)
host:指定需要訪問的MySQL服務器
port:指定訪問MySQL數據庫的端口號
charset:指定讀取MySQL數據庫的字符集,如果數據庫表中含有中文,一般可以嘗試將該參數設置為'utf8'或'gbk'
user:指定訪問MySQL數據庫的用戶名
password:指定訪問MySQL數據庫的密碼
database:指定訪問MySQL數據庫的具體庫名
利用pymysql創建好鏈接MySQL的鏈接之后即可通過該鏈接操作MySQL
pd.read_sql('select * from user', con = conn) conn.close() # 關閉鏈接
網頁表格數據讀取
pd.read_html(r'https://baike.baidu.com/item/NBA%E6%80%BB%E5%86%A0%E5%86%9B/2173192?fr=aladdin')
數據概覽
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)