python數(shù)據(jù)分析3:數(shù)據(jù)抽取

1.使用Pandas獲取網(wǎng)頁(yè)中的表格數(shù)據(jù)并轉(zhuǎn)化為EXCEL電子表格

# 導(dǎo)入NBA球員的薪資數(shù)據(jù)

import pandas as pd

df = pd.DataFrame()

url_list = ['http://www.espn.com/nba/salaries/_/seasontype/4']

for i in range(2, 4):

? ? url = 'http://www.espn.com/nba/salaries/_/page/%s/seasontype/4' % i

? ? url_list.append(url)

for url in url_list:

? ? df = df.append(pd.read_html(url), ignore_index=True)

df = df[[x.startswith('$') for x in df[3]]]

# print(df)

df.to_excel('NBA.xlsx',header=['RK','NAME','TEAM','SALARY'],index=False)

2.數(shù)據(jù)抽取

# loc屬性:以列名和行名作為參數(shù),當(dāng)只有一個(gè)參數(shù)時(shí),默認(rèn)是行名,即抽取整行數(shù)據(jù),包括所有列,如df.loc['a']

# iloc屬性:以行和列位置索引(即0,1,2...)作為參數(shù),0表示第一行,1表示第二行,以此類(lèi)推。當(dāng)只有一個(gè)參數(shù)時(shí),默認(rèn)是行索引,即抽取整行數(shù)據(jù),包括所有列,如df.iloc[0]

# 抽取一行考試成績(jī)

import pandas as pd

pd.set_option('display.unicode.east_asian_width',True)

data = [[110, 105, 99], [105, 88, 115], [109, 120, 130], [112, 115]]

name = ['明日', '七月流火', '高袁圓', '二月二']

columns = ['語(yǔ)文', '數(shù)學(xué)', '英語(yǔ)']

df = pd.DataFrame(data=data, index=name, columns=columns)

print(df.loc['明日'])

print(df.iloc[0])

語(yǔ)文? ? 110.0

數(shù)學(xué)? ? 105.0

英語(yǔ)? ? 99.0

Name: 明日, dtype: float64

【抽取多行數(shù)據(jù)】

import pandas as pd

pd.set_option('display.unicode.east_asian_width',True)

data = [[110, 105, 99], [105, 88, 115], [109, 120, 130], [112, 115]]

name = ['明日', '七月流火', '高袁圓', '二月二']

columns = ['語(yǔ)文', '數(shù)學(xué)', '英語(yǔ)']

df = pd.DataFrame(data=data, index=name, columns=columns)

print(df.loc[['明日','高袁圓']])

print(df.iloc[[0,2]])

? ? ? ? 語(yǔ)文? 數(shù)學(xué)? 英語(yǔ)

明日? ? 110? 105? 99.0

高袁圓? 109? 120? 130.0

【抽取連續(xù)幾個(gè)學(xué)生的考試成績(jī)】

import pandas as pd

pd.set_option('display.unicode.east_asian_width',True)

data = [[110, 105, 99], [105, 88, 115], [109, 120, 130], [112, 115]]

name = ['明日', '七月流火', '高袁圓', '二月二']

columns = ['語(yǔ)文', '數(shù)學(xué)', '英語(yǔ)']

df = pd.DataFrame(data=data, index=name, columns=columns)

print(df.loc['明日':'高袁圓'])? # 從明日到高袁圓

print(df.loc[:'七月流火':])? # 從第1行到七月流火

print(df.iloc[0:3])? # 從第1行到第3行

print(df.iloc[1::])? # 從第2行到最后一行

? ? ? ? ? 語(yǔ)文? 數(shù)學(xué)? 英語(yǔ)

明日? ? ? 110? 105? 99.0

七月流火? 105? ? 88? 115.0

高袁圓? ? 109? 120? 130.0

? ? ? ? ? 語(yǔ)文? 數(shù)學(xué)? 英語(yǔ)

明日? ? ? 110? 105? 99.0

七月流火? 105? ? 88? 115.0

? ? ? ? ? 語(yǔ)文? 數(shù)學(xué)? 英語(yǔ)

明日? ? ? 110? 105? 99.0

七月流火? 105? ? 88? 115.0

高袁圓? ? 109? 120? 130.0

? ? ? ? ? 語(yǔ)文? 數(shù)學(xué)? 英語(yǔ)

七月流火? 105? ? 88? 115.0

高袁圓? ? 109? 120? 130.0

二月二? ? 112? 115? ? NaN

【抽取指定列數(shù)據(jù)】

import pandas as pd

pd.set_option('display.unicode.east_asian_width',True)

data = [[110, 105, 99], [105, 88, 115], [109, 120, 130], [112, 115]]

name = ['明日', '七月流火', '高袁圓', '二月二']

columns = ['語(yǔ)文', '數(shù)學(xué)', '英語(yǔ)']

df = pd.DataFrame(data=data, index=name, columns=columns)

print(df[['語(yǔ)文', '數(shù)學(xué)']])

? ? ? ? ? 語(yǔ)文? 數(shù)學(xué)

明日? ? ? 110? 105

七月流火? 105? ? 88

高袁圓? ? 109? 120

二月二? ? 112? 115

【抽取指定學(xué)科的考試成績(jī)】

import pandas as pd

pd.set_option('display.unicode.east_asian_width',True)

data = [[110, 105, 99], [105, 88, 115], [109, 120, 130], [112, 115]]

name = ['明日', '七月流火', '高袁圓', '二月二']

columns = ['語(yǔ)文', '數(shù)學(xué)', '英語(yǔ)']

df = pd.DataFrame(data=data, index=name, columns=columns)

print(df.loc[:,['語(yǔ)文','數(shù)學(xué)']])? # 抽取“語(yǔ)文”和“數(shù)學(xué)”

print(df.iloc[:,[0,1]])? # 抽取第1列和第2列

? ? ? ? ? 語(yǔ)文? 數(shù)學(xué)

明日? ? ? 110? 105

七月流火? 105? ? 88

高袁圓? ? 109? 120

二月二? ? 112? 115

print(df.loc[:,'數(shù)學(xué)':])? # 抽取從“數(shù)學(xué)”開(kāi)始到最后一列

? ? ? ? ? 數(shù)學(xué)? 英語(yǔ)

明日? ? ? 105? 99.0

七月流火? ? 88? 115.0

高袁圓? ? 120? 130.0

二月二? ? 115? ? NaN

print(df.iloc[:,:2])? # 連續(xù)抽取從1列開(kāi)始到第3列,但不包括第3列

? ? ? ? ? 語(yǔ)文? 數(shù)學(xué)

明日? ? ? 110? 105

七月流火? 105? ? 88

高袁圓? ? 109? 120

二月二? ? 112? 115

【按指定條件抽取數(shù)據(jù)】

# 取其中一個(gè)元素 .iat[x,x]

# 基于位置的查詢(xún) .iloc[]? iloc[2,1]

# 基于行列名稱(chēng)的查詢(xún)? .loc[x]

# 抽取指定學(xué)科和指定分?jǐn)?shù),如抽取語(yǔ)言成績(jī)大于105分,數(shù)學(xué)成績(jī)大于88分的數(shù)據(jù)

import pandas as pd

pd.set_option('display.unicode.east_asian_width',True)

data = [[110, 105, 99], [105, 88, 115], [109, 120, 130], [112, 115]]

name = ['明日', '七月流火', '高袁圓', '二月二']

columns = ['語(yǔ)文', '數(shù)學(xué)', '英語(yǔ)']

df = pd.DataFrame(data=data, index=name, columns=columns)

print(df.loc[(df['語(yǔ)文']>105) & (df['數(shù)學(xué)']>88)])

? ? ? ? 語(yǔ)文? 數(shù)學(xué)? 英語(yǔ)

明日? ? 110? 105? 99.0

高袁圓? 109? 120? 130.0

二月二? 112? 115? ? NaN

3.增加數(shù)據(jù)

【增加一列數(shù)據(jù)】

import pandas as pd

pd.set_option('display.unicode.east_asian_width',True)

data = [[110, 105, 99], [105, 88, 115], [109, 120, 130], [112, 115, 140]]

name = ['明日', '七月流火', '高袁圓', '二月二']

columns = ['語(yǔ)文', '數(shù)學(xué)', '英語(yǔ)']

df = pd.DataFrame(data=data, index=name, columns=columns)

df['物理'] = [88, 79, 60, 50]

print(df)

? ? ? ? ? 語(yǔ)文? 數(shù)學(xué)? 英語(yǔ)? 物理

明日? ? ? 110? 105? ? 99? ? 88

七月流火? 105? ? 88? 115? ? 79

高袁圓? ? 109? 120? 130? ? 60

二月二? ? 112? 115? 140? ? 50


# 在第一列的后面插入“物理”,其值為w1的數(shù)值

import pandas as pd

pd.set_option('display.unicode.east_asian_width',True)

data = [[110, 105, 99], [105, 88, 115], [109, 120, 130], [112, 115, 140]]

name = ['明日', '七月流火', '高袁圓', '二月二']

columns = ['語(yǔ)文', '數(shù)學(xué)', '英語(yǔ)']

df = pd.DataFrame(data=data, index=name, columns=columns)

w1 = [88, 79, 60, 50]

df.insert(1, '物理', w1)

print(df)

? ? ? ? ? 語(yǔ)文? 物理? 數(shù)學(xué)? 英語(yǔ)

明日? ? ? 110? 88? 105? 99

七月流火? 105? ? 79? ? 88? 115

高袁圓? ? 109? ? 60? 120? 130

二月二? ? 112? ? 50? 115? 140

【按行增加多行數(shù)據(jù)】

import pandas as pd

pd.set_option('display.unicode.east_asian_width',True)

data = [[110, 105, 99], [105, 88, 115], [109, 120, 130], [112, 115, 140]]

name = ['明日', '七月流火', '高袁圓', '二月二']

columns = ['語(yǔ)文', '數(shù)學(xué)', '英語(yǔ)']

df = pd.DataFrame(data=data, index=name, columns=columns)

df_insert = pd.DataFrame({'語(yǔ)文':[100, 123, 138], '數(shù)學(xué)':[99, 142, 60], '英語(yǔ)':[98, 139, 99]}, index=['錢(qián)多多', '童年', '無(wú)名'])

df1 = df.append(df_insert)

print(df1)

? ? ? ? ? 語(yǔ)文? 數(shù)學(xué)? 英語(yǔ)

明日? ? ? 110? 105? ? 99

七月流火? 105? ? 88? 115

高袁圓? ? 109? 120? 130

二月二? ? 112? 115? 140

錢(qián)多多? ? 100? ? 99? ? 98

童年? ? ? 123? 142? 139

無(wú)名? ? ? 138? ? 60? ? 99

4.修改數(shù)據(jù)

【修改列標(biāo)題】

import pandas as pd

pd.set_option('display.unicode.east_asian_width',True)

data = [[110, 105, 99], [105, 88, 115], [109, 120, 130], [112, 115, 140]]

name = ['明日', '七月流火', '高袁圓', '二月二']

columns = ['語(yǔ)文', '數(shù)學(xué)', '英語(yǔ)']

df = pd.DataFrame(data=data, index=name, columns=columns)

df.columns = ['語(yǔ)文', '數(shù)學(xué)(上)', '英語(yǔ)']

print(df)

? ? ? ? ? 語(yǔ)文? 數(shù)學(xué)(上)? 英語(yǔ)

明日? ? ? 110? ? ? ? 105? ? 99

七月流火? 105? ? ? ? ? 88? 115

高袁圓? ? 109? ? ? ? 120? 130

二月二? ? 112? ? ? ? 115? 140

【修改多個(gè)學(xué)科的列名】

import pandas as pd

pd.set_option('display.unicode.east_asian_width',True)

data = [[110, 105, 99], [105, 88, 115], [109, 120, 130], [112, 115, 140]]

name = ['明日', '七月流火', '高袁圓', '二月二']

columns = ['語(yǔ)文', '數(shù)學(xué)', '英語(yǔ)']

df = pd.DataFrame(data=data, index=name, columns=columns)

df.rename(columns = {'語(yǔ)文':'語(yǔ)文(上)', '數(shù)學(xué)':'數(shù)學(xué)(上)', '英語(yǔ)':'英語(yǔ)(上)'}, inplace=True)

print(df)

inplace=True,直接修改df,如果不設(shè)置,就是只返回原始數(shù)據(jù)

? ? ? ? ? 語(yǔ)文(上)? 數(shù)學(xué)(上)? 英語(yǔ)(上)

明日? ? ? ? ? ? 110? ? ? ? 105? ? ? ? ? 99

七月流火? ? ? ? 105? ? ? ? ? 88? ? ? ? 115

高袁圓? ? ? ? ? 109? ? ? ? 120? ? ? ? 130

二月二? ? ? ? ? 112? ? ? ? 115? ? ? ? 140

【修改行標(biāo)題】

import pandas as pd

pd.set_option('display.unicode.east_asian_width',True)

data = [[110, 105, 99], [105, 88, 115], [109, 120, 130], [112, 115, 140]]

name = ['明日', '七月流火', '高袁圓', '二月二']

columns = ['語(yǔ)文', '數(shù)學(xué)', '英語(yǔ)']

df = pd.DataFrame(data=data, index=name, columns=columns)

df.index = list('1234')

print(df)

? 語(yǔ)文? 數(shù)學(xué)? 英語(yǔ)

1? 110? 105? ? 99

2? 105? ? 88? 115

3? 109? 120? 130

4? 112? 115? 140

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容