series數據操作&dataframe基本操作


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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM