欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python數(shù)據(jù)處理DataFrame小記

系統(tǒng) 1993 0

python數(shù)據(jù)處理小記

    • 簡(jiǎn)介:
    • 1、DataFram定義:
    • 2、DataFrame的append
    • 3、DataFrame去除列或行
    • 4、DataFrame查看數(shù)據(jù)基本統(tǒng)計(jì)情況
    • 5、DataFrame的applymap及apply操作
    • 6、DataFrame的元素、列、行的獲取
    • 7、DataFrame的透視表
    • 8、DataFrame空值處理、去重
    • 9、DataFrame的數(shù)據(jù)庫(kù)查詢
    • 10、DataFrame插入數(shù)據(jù)庫(kù)
    • 11、python去除字符串前后指定值

簡(jiǎn)介:

目前從事數(shù)據(jù)版塊的工作,基本就是數(shù)倉(cāng)、ETL、BI這一塊。學(xué)習(xí)了一個(gè)python機(jī)器學(xué)習(xí)課程,在此記下學(xué)習(xí)過(guò)程中遇到的坑。pandas的詳細(xì)使用可查:http://pandas.pydata.org/pandas-docs/stable/index.html

1、DataFram定義:

只定義列名

            
              import pandas as pd

df = pd.DataFrame(columns=['姓名','年齡','性別'])
print(df)

            
          

輸出為:
Empty DataFrame
Columns: [姓名, 年齡, 性別]
Index: []

列名及索引(行名)都定義:

            
              import pandas as pd

df = pd.DataFrame(columns=['姓名','年齡','性別'],index=['甲','乙','丙'])
print(df)

            
          

輸出為:
  姓名 年齡 性別
甲 NaN NaN NaN
乙 NaN NaN NaN
丙 NaN NaN NaN

定義加上值:

            
              import pandas as pd

df = pd.DataFrame([['張三',23,'男'],['李四',24,'女'],['王五',35,'男']],columns=['姓名','年齡','性別'],index=['甲','乙','丙'])
print(df)

            
          

輸出為:
  姓名 年齡 性別
甲 張三 23 男
乙 李四 24 女
丙 王五 35 男

2、DataFrame的append

append字典結(jié)構(gòu)

            
              import pandas as pd

df = pd.DataFrame(columns=['姓名','年齡','性別'])
print(df)
line = {'姓名':'張三','年齡':24,'性別':'男'}
df = df.append(line,ignore_index=True)
print(df)

            
          

輸出為:
Empty DataFrame
Columns: [姓名, 年齡, 性別]
Index: []
  姓名 年齡 性別
0 張三 24 男

append Series結(jié)構(gòu)
方法1:

            
              import pandas as pd

df = pd.DataFrame(columns=['姓名','年齡','性別'])
print(df)
line = pd.Series({'姓名':'張三','年齡':24,'性別':'男'})
df = df.append(line,ignore_index=True)
print(df)

            
          

輸出為:
Empty DataFrame
Columns: [姓名, 年齡, 性別]
Index: []
 姓名 年齡 性別
0 張三 24 男

方法2:

            
              import pandas as pd

df = pd.DataFrame(columns=['姓名','年齡','性別'])
print(df)
line = pd.Series({'姓名':'張三','年齡':24,'性別':'男'},name='Series可以設(shè)置索引名稱')
df = df.append(line,ignore_index=False)
print(df)

            
          

輸出為:
Empty DataFrame
Columns: [姓名, 年齡, 性別]
Index: []
            姓名 年齡 性別
Series可以設(shè)置索引名稱 張三 24 男

如果是append字典,則ignore_index必須為True,如果是append Series結(jié)構(gòu),則可以設(shè)置ignore_index為False,然后設(shè)置特定的索引。

3、DataFrame去除列或行

去除列:

            
              import pandas as pd

df = pd.DataFrame([['張三',23,'男'],['李四',24,'女'],['王五',35,'男']],columns=['姓名','年齡','性別'],index=['甲','乙','丙'])
print(df)
#inplace如果設(shè)置為False,則不會(huì)替換原有對(duì)象
df.drop(columns=['姓名','年齡'],inplace=False)
print(df)
#列刪除
df.drop(columns=['姓名','年齡'],inplace=True)
print(df)
#行刪除
df = pd.DataFrame([['張三',23,'男'],['李四',24,'女'],['王五',35,'男']],columns=['姓名','年齡','性別'],index=['甲','乙','丙'])
df.drop(index='甲',inplace=True)
print(df)

            
          

輸出為:
 姓名 年齡 性別
甲 張三 23 男
乙 李四 24 女
丙 王五 35 男
 姓名 年齡 性別
甲 張三 23 男
乙 李四 24 女
丙 王五 35 男
  性別
甲 男
乙 女
丙 男
  姓名 年齡 性別
乙 李四 24 女
丙 王五 35 男

drop方法,需要留意inplace變量,若要替換則設(shè)置為True,columns和index可以通過(guò)列表結(jié)構(gòu)或字符串來(lái)定位需要?jiǎng)h除的列和行。

行刪除的方法二:

            
              import pandas as pd

df = pd.DataFrame([['張三',23,'男'],['李四',24,'女'],['王五',35,'男']],columns=['姓名','年齡','性別'],index=['甲','乙','丙'])
print(df)
#isin是獲取所有姓名為['張三']的行數(shù)據(jù),~是取反的意思。
df = df[~df['姓名'].isin(['張三'])]
print(df)

            
          

輸出為:
  姓名 年齡 性別
甲 張三 23 男
乙 李四 24 女
丙 王五 35 男
  姓名 年齡 性別
乙 李四 24 女
丙 王五 35 男

4、DataFrame查看數(shù)據(jù)基本統(tǒng)計(jì)情況

查看統(tǒng)計(jì)詳情:

            
              import pandas as pd

df = pd.DataFrame([['張三',23,'男'],['李四',24,'女'],['王五',35,'男']],columns=['姓名','年齡','性別'],index=['甲','乙','丙'])
print(df)
print(df.describe())

            
          

輸出為:
  姓名 年齡 性別
甲 張三 23 男
乙 李四 24 女
丙 王五 35 男
   年齡
count 3.000000
mean 27.333333
std 6.658328
min 23.000000
25% 23.500000
50% 24.000000
75% 29.500000
max 35.000000

describe方法可以看到數(shù)據(jù)里面數(shù)值類型的基本統(tǒng)計(jì)情況。

5、DataFrame的applymap及apply操作

applymap操作:

            
              import pandas as pd

df = pd.DataFrame([4,13,5,38,28,59,24,79],columns=['年齡'])

def testApplyMap(age):
    #小于30的標(biāo)記為年輕,大于等于30的標(biāo)記為中年,大于等于60標(biāo)記為老年
    return '老年' if age >= 60 else ('中年' if age >= 30 else '年輕')
print(df)
print(df.applymap(testApplyMap))
print(df)
df = df.applymap(testApplyMap)
print(df)

            
          

輸出為:
 年齡
0 4
1 13
2 5
3 38
4 28
5 59
6 24
7 79
  年齡
0 年輕
1 年輕
2 年輕
3 中年
4 年輕
5 中年
6 年輕
7 老年
 年齡
0 4
1 13
2 5
3 38
4 28
5 59
6 24
7 79
 年齡
0 年輕
1 年輕
2 年輕
3 中年
4 年輕
5 中年
6 年輕
7 老年

applymap是向方法中傳入每一個(gè)元素,然后方法返回結(jié)果。applymap沒(méi)有inplace參數(shù),如果要覆蓋原對(duì)象,需要進(jìn)行重新賦值操作。

apply操作:

            
              import pandas as pd

df = pd.DataFrame({

    's1': [27.93, 58.08, 38.67, 45.83, 70.26, 46.61, 49.73, 34.02, 56.64, 57.28],

    's2': [28.18, 50.61, 31.73, 31.48, 55.96, 22.73, 40.47, 42.02, 31.39, 64.21],

    's3': [29.39, 51.62, 57.91, 45.94, 53.81, 45.77, 69.13, 28.75, 43.43, 55.7],

    's4': [40.52, 48.55, 59.24, 71.21, 58.48, 63.63, 55.16, 34.9, 54, 68.03],

    's5': [26.26, 54.03, 49.08, 46.53, 43.23, 56.79, 58.71, 26.43, 44.97, 54.16]

}, index =  ['05-21', '05-22', '05-23', '05-24', '05-25', '05-26', '05-27', '05-28', '05-29', '05-30'])

def testApply(sale):
    return max(sale)
print(df)
print(df.apply(testApply))
print(df.apply(testApply,axis=1))
print(df)

            
          

輸出為:
   s1 s2 s3 s4 s5
05-21 27.93 28.18 29.39 40.52 26.26
05-22 58.08 50.61 51.62 48.55 54.03
05-23 38.67 31.73 57.91 59.24 49.08
05-24 45.83 31.48 45.94 71.21 46.53
05-25 70.26 55.96 53.81 58.48 43.23
05-26 46.61 22.73 45.77 63.63 56.79
05-27 49.73 40.47 69.13 55.16 58.71
05-28 34.02 42.02 28.75 34.90 26.43
05-29 56.64 31.39 43.43 54.00 44.97
05-30 57.28 64.21 55.70 68.03 54.16
s1 70.26
s2 64.21
s3 69.13
s4 71.21
s5 58.71
dtype: float64

05-21 40.52
05-22 58.08
05-23 59.24
05-24 71.21
05-25 70.26
05-26 63.63
05-27 69.13
05-28 42.02
05-29 56.64
05-30 68.03
dtype: float64
    s1 s2 s3 s4 s5
05-21 27.93 28.18 29.39 40.52 26.26
05-22 58.08 50.61 51.62 48.55 54.03
05-23 38.67 31.73 57.91 59.24 49.08
05-24 45.83 31.48 45.94 71.21 46.53
05-25 70.26 55.96 53.81 58.48 43.23
05-26 46.61 22.73 45.77 63.63 56.79
05-27 49.73 40.47 69.13 55.16 58.71
05-28 34.02 42.02 28.75 34.90 26.43
05-29 56.64 31.39 43.43 54.00 44.97
05-30 57.28 64.21 55.70 68.03 54.16

apply是想方法里面?zhèn)魅胍涣谢蛘咭恍羞M(jìn)行運(yùn)算,axis=0是傳入一列,axis=1則傳入一行,默認(rèn)為0。

6、DataFrame的元素、列、行的獲取

            
              import pandas as pd

df = pd.DataFrame([['張三',23,'男'],['李四',24,'女'],['王五',35,'男']],columns=['姓名','年齡','性別'],index=['甲','乙','丙'])

print(df,'\n')
print('DataFrame后面緊接[],則可以獲取對(duì)應(yīng)列數(shù)據(jù)')
print(df['姓名'],'\n')
print('DataFrame后面緊接[][],第一個(gè)為列名,第二個(gè)為行名')
print(df['姓名']['甲'],'\n')
print('DataFrame的iloc里面對(duì)應(yīng)的是行的默認(rèn)索引,0代表第一行,1代表第二行,如此類推')
print(df.iloc[0],'\n')
print('DataFrame的loc里面對(duì)應(yīng)的行名')
print(df.loc['甲'],'\n')
print('獲取列后,也是可以通過(guò)iloc和loc來(lái)獲取行數(shù)據(jù)的')
print(df['姓名'].iloc[2])
print(df['姓名'].loc['丙'],'\n')
print('iat可以通過(guò)列和行的默認(rèn)索引來(lái)定位數(shù)據(jù)')
print(df.iat[0,0],'\n')

            
          

輸出為:
姓名 年齡 性別
甲 張三 23 男
乙 李四 24 女
丙 王五 35 男

DataFrame后面緊接[],則可以獲取對(duì)應(yīng)列數(shù)據(jù)
甲 張三
乙 李四
丙 王五
Name: 姓名, dtype: object

DataFrame后面緊接[][],第一個(gè)為列名,第二個(gè)為行名
張三

DataFrame的iloc里面對(duì)應(yīng)的是行的默認(rèn)索引,0代表第一行,1代表第二行,如此類推
姓名 張三
年齡 23
性別 男
Name: 甲, dtype: object

DataFrame的loc里面對(duì)應(yīng)的行名
姓名 張三
年齡 23
性別 男
Name: 甲, dtype: object

獲取列后,也是可以通過(guò)iloc和loc來(lái)獲取行數(shù)據(jù)的
王五
王五

iat可以通過(guò)列和行的默認(rèn)索引來(lái)定位數(shù)據(jù)
張三

7、DataFrame的透視表

方法為pivot_table:

            
              import pandas as pd
import numpy as np


df = pd.DataFrame([ ['張三','語(yǔ)文',98.],

                   ['張三','體育',60.],

                   ['李四','數(shù)學(xué)',60.],

                   ['李四','語(yǔ)文',100.],

                   ['王五','數(shù)學(xué)',89],

                   ['王五','體育',98.] ],

                    columns=['name','course','score'])

print(df.pivot_table('score',index='name',columns='course',aggfunc=np.sum,margins=True,fill_value=0))

            
          

輸出為:
course 體育 數(shù)學(xué) 語(yǔ)文 All
name
張三 60 0 98 158.0
李四 0 60 100 160.0
王五 98 89 0 187.0
All 158 149 198 505.0

參數(shù)說(shuō)明:
data: 創(chuàng)建透視表的dataframe

values: 要聚合的值, optional

index: 要聚合的index

columns: 要聚合的columns

aggfunc:聚合的方式, default numpy.mean

fill_value: 用來(lái)替換透視表的缺失值scalar, default None

margins: 添加所有行,列,例如在后面加個(gè)“總和”boolean, default False

dropna: 不要包含條目都是NaN的列boolean, default True

margins_name: 行列名稱, default ‘All’

8、DataFrame空值處理、去重

空值處理:

            
              import pandas as pd


df = pd.DataFrame([23,3,13,None,5],columns=['年齡'])

print(df,'\n')
#指定填充的值
print(df.fillna(0))
#取對(duì)應(yīng)列的上一行數(shù)據(jù)
print(df.ffill())
#取對(duì)應(yīng)列的下一行數(shù)據(jù)
print(df.bfill())

            
          

輸出為:
年齡
0 23.0
1 3.0
2 13.0
3 NaN
4 5.0

年齡
0 23.0
1 3.0
2 13.0
3 0.0
4 5.0
年齡
0 23.0
1 3.0
2 13.0
3 13.0
4 5.0
年齡
0 23.0
1 3.0
2 13.0
3 5.0
4 5.0

多有的空值補(bǔ)充函數(shù)都不會(huì)覆蓋原來(lái)對(duì)象,需要設(shè)置inplace=True參數(shù)才能覆蓋。

去重:

            
              import pandas as pd


df = pd.DataFrame([23,3,3,13,None,5],columns=['年齡'])

print(df,'\n')
print(df.drop_duplicates())
print(df)
df.drop_duplicates(inplace=True)
print(df)

            
          

輸出為:
年齡
0 23.0
1 3.0
2 3.0
3 13.0
4 NaN
5 5.0

年齡
0 23.0
1 3.0
3 13.0
4 NaN
5 5.0
年齡
0 23.0
1 3.0
2 3.0
3 13.0
4 NaN
5 5.0
年齡
0 23.0
1 3.0
3 13.0
4 NaN
5 5.0

9、DataFrame的數(shù)據(jù)庫(kù)查詢

            
              import pandas as pd
from sqlalchemy import create_engine

engine = create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/test?charset=utf8")

#SQL查詢
def query(sql,engine):
    return pd.read_sql(sql, engine, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)

df = query('select * from a limit 1',engine)
print(type(df))
print(df)

            
          

輸出為:

id no name SYSTEM_SOURCE
0 1 1 哈哈 Z

參數(shù)詳情:
sql : 要執(zhí)行的SQL查詢。

con : SQLAlchemy可連接(引擎/連接)或數(shù)據(jù)庫(kù)字符串URI或DBAPI2連接(后備模式)使用SQLAlchemy可以使用該庫(kù)支持的任何數(shù)據(jù)庫(kù)。如果是DBAPI2對(duì)象,則僅支持sqlite3。

index_col : 字符串或字符串列表,可選,默認(rèn)值:無(wú)。要設(shè)置為索引的列(MultiIndex)。

coerce_float : boolean,默認(rèn)為True
嘗試將非字符串,非數(shù)字對(duì)象(如decimal.Decimal)的值轉(zhuǎn)換為浮點(diǎn),這對(duì)SQL結(jié)果集很有用。

params : list,tuple或dict,optional,默認(rèn)值:None
要傳遞給執(zhí)行方法的參數(shù)列表。用于傳遞參數(shù)的語(yǔ)法取決于數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序。檢查數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序文檔,了解支持PEP 249的paramstyle中描述的五種語(yǔ)法樣式。例如。對(duì)于psycopg2,使用%(name)s所以使用params = {‘name’:‘value’}

parse_dates : list或dict,默認(rèn)值:None
要解析為日期的列名列表。
在解析字符串時(shí)間時(shí)格式字符串與strftime兼容的位置的字典,或者在解析整數(shù)時(shí)間戳的情況下是(D,s,ns,ms,us)之一。{column_name: format string}
dict of ,其中arg dict對(duì)應(yīng)于關(guān)鍵字參數(shù)。 特別適用于沒(méi)有本機(jī)Datetime支持的數(shù)據(jù)庫(kù),例如SQLite。{column_name: arg dict}pandas.to_datetime()
columns : list,默認(rèn)值:None
從SQL表中選擇的列名列表(僅在讀取表時(shí)使用)。

chunksize : int,默認(rèn)無(wú)
如果指定,則返回一個(gè)迭代器,其中chunksize是要包含在每個(gè)塊中的行數(shù)。

10、DataFrame插入數(shù)據(jù)庫(kù)

            
              import pandas as pd
from sqlalchemy import create_engine

engine = create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/test?charset=utf8")

df = pd.DataFrame([['5','瀧澤蘿拉','島國(guó)']],columns=['no','name','SYSTEM_SOURCE'])
#第一個(gè)參數(shù)為DataFrame格式的數(shù)據(jù),第二個(gè)參數(shù)為表名,第三個(gè)參數(shù)為數(shù)據(jù)庫(kù)連接,第四個(gè)為庫(kù)名,第五個(gè)即存在相同的重復(fù)插入。這里的set_index是將no設(shè)置為索引列,如果不這樣設(shè)置,它會(huì)默認(rèn)的插入多一列index的索引列,因?yàn)閿?shù)據(jù)庫(kù)表是沒(méi)有這一列的,這樣會(huì)導(dǎo)致報(bào)錯(cuò)。
pd.io.sql.to_sql(df.set_index('no'),'a',engine,schema='test',if_exists='append')

            
          

Python數(shù)據(jù)處理DataFrame小記_第1張圖片

11、python去除字符串前后指定值

去空格:

            
              import pandas as pd


s = ' sskc ufss '
s = s.strip()
print(s)
s = s.lstrip('s')
print(s)
s = s.rstrip('s')
print(s)

            
          

輸出為:
sskc ufss
kc ufss
kc uf

strip、lstrip、rstrip默認(rèn)是去除空格,可以指定值進(jìn)行去除。

未完待續(xù),有空更新。。。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 短视频网站免费观看 | 97久久精品一区二区三区观看 | 精品日本三级在线观看视频 | www.色哟哟| 99久热 | 伊人a.v在线| 亚洲综合亚洲综合网成人 | 欧美成人精品一区二区男人看 | 最新欧美精品一区二区三区 | 亚洲国产欧美自拍 | 国产成人福利在线视老湿机 | 中国黄色一级生活片 | 亚洲综合情 | 美女国产精品 | 日本无卡无吗在线 | 精品久久久久久国产 | 人人射人人草 | 日本青草视频 | 国产综合在线视频 | 久久精品欧美一区二区三区不卡 | 高清一区二区在线观看 | 91天堂| 日日夜夜精品免费视频 | 欧美视频国产 | 成人爽a毛片在线视频网站 婷婷色在线观看 | 国产精品岛国久久久久久 | 91亚洲国产成人精品性色 | 欧美美女动态图 | 毛片a片| 亚洲性69影院在线观看 | 免费网站看av片 | 免费看a视频 | 高清男女性高爱潮免费 | 1024app成人无限观看 | 国产精品18hdxxxⅹ在线 | 狠狠干天天干 | 色婷婷成人做爰A片免费看网站 | 欧美精品一区二区三区蜜桃视频 | 亚洲综合影院 | 久久久看| 亚洲第一人伊人色综合 |