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