藍字Python當打之年'
import pandas as pd
import numpy as np
2.1 從CSV文件讀取數(shù)據(jù),編碼'gbk'
2.6 保存數(shù)據(jù)
# 2.1 從CSV文件讀取數(shù)據(jù),編碼'gbk'
pd.read_csv(filename, encoding='gbk')
# 2.2 讀取前6行,當數(shù)據(jù)量比較大時,可以只讀取前n行
pd.read_csv(filename, encoding='gbk', nrows = 6)
# 2.3 第一列作為行索引,忽略列索引
pd.read_csv(filename, encoding='gbk', header=None, index_col=0)
# 2.4 讀取時忽略第1/3/5行和最后兩行
pd.read_csv(filename, encoding='gbk', skiprows=[1,3,5], skipfooter=2, engine='python')
# 2.5 從限定分隔符(',')的文件或文本讀取數(shù)據(jù)
pd.read_table(filename, sep=',', encoding='gbk')
# 2.6 保存數(shù)據(jù)
# 保存為csv文件
df.to_csv('test_ison.csv')
# 保存為xlsx文件
df.to_excel('test_xlsx.xlsx',index=False)
# 保存為ison文件
df.to_json('test_json.txt')
3.1 查看前n行
3.7 查看數(shù)值型列的匯總統(tǒng)計
# 3.1 查看前n行
df.head(3)
# 3.2 查看后n行
df.tail(3)
# 3.3 查看行數(shù)和列數(shù)
df.shape
# 3.4查看列索引
df.columns
# 3.5 查看行索引
df.index
# 3.6 查看索引、數(shù)據(jù)類型和內存信息
df.info()
# 3.7 查看數(shù)值型列的匯總統(tǒng)計
df.describe()
# 3.8 查看每一列的唯一值和計數(shù)
df.apply(pd.Series.value_counts)
4.1 重命名列名
4.2 選擇性更改列名
4.3 批量更改索引
4.4 批量更改列名
4.5 設置姓名列為行索引
4.6 檢查哪些列包含缺失值
4.7 統(tǒng)計各列空值
4.8 刪除本列中空值的行
4.9 僅保留本列中是空值的行
4.10 去掉某行
4.11 去掉某列
4.12 刪除所有包含空值的行
4.13 刪除行里全都是空值的行
4.14 刪除所有包含空值的列
4.15 保留至少有6個非空值的行
4.16 保留至少有11個非空值的列
4.17 行數(shù)據(jù)向下填充
4.18 列數(shù)據(jù)向右填充
4.19 用0替換所有的空值
4.20 強制轉換數(shù)據(jù)類型
4.21 查看有多少不同的城市
4.22 單值替換
4.23 多值替換
4.24 多值替換單值
4.25 替換某列,顯示需要加inplace=True
4.26 拆分某列,生成新的Dataframe
# 4.1 重命名列名
df.columns = ['姓名','性別','語文','數(shù)學','英語','城市','省份']
# 4.2 選擇性更改列名
df.rename(columns={'姓名': '姓--名','性別': '性--別'},inplace=True)
# 4.3 批量更改索引
df.rename(lambda x: x + 10)
# 4.4 批量更改列名
df.rename(columns=lambda x: x + '_1')
# 4.5 設置姓名列為行索引
df.set_index('姓名')
# 4.6 檢查哪些列包含缺失值
df.isnull().any()
# 4.7 統(tǒng)計各列空值
df.isnull().sum()
# 4.8 刪除本列中空值的行
df[df['數(shù)學'].notnull()]
df[~df['數(shù)學'].isnull()]
# 4.9 僅保留本列中是空值的行
df[df['數(shù)學'].isnull()]
df[~df['數(shù)學'].notnull()]
# 4.10 去掉某行
df.drop(0, axis=0)
# 4.11 去掉某列
df.drop('英語', axis=1)
# 4.12 刪除所有包含空值的行
df.dropna()
# 4.13 刪除行里全都是空值的行
df.dropna(how = 'all')
# 4.14 刪除所有包含空值的列
df.dropna(axis=1)
# 4.15 保留至少有6個非空值的行
df.dropna(thresh=6)
# 4.16 保留至少有11個非空值的列
df.dropna(axis=1,thresh=11)
# 4.17 行數(shù)據(jù)向下填充
df.fillna(method = 'ffill')
# 4.18 列數(shù)據(jù)向右填充
df.fillna(method = 'ffill',axis=1)
# 4.19 用0替換所有的空值
df.fillna(0)
# 4.20 強制轉換數(shù)據(jù)類型
df_t1 = df.dropna()
df_t1['語文'].astype('int')
# 4.21 查看有多少不同的城市
df['城市'].unique()
# 4.22 單值替換
df.replace('蘇州', '南京')
# 4.23 多值替換
df.replace({'蘇州':'南京','廣州':'深圳'})
df.replace(['蘇州','廣州'],['南京','深圳'])
# 4.24 多值替換單值
df.replace(['深圳','廣州'],'東莞')
# 4.25 替換某列,顯示需要加inplace=True
df['城市'] = df['城市'].replace('蘇州', '南京')
# 4.26 拆分某列,生成新的Dataframe
df1 = df['姓名'].str.split('-',expand=True)
df1.columns = ['學號','姓名']
# 4.27 某一列類型轉換,注意該列類型要一致,包括(NaN)
df1.dropna(inplace = True)
df1['語文'] = df1['語文'].apply(int)
5.2 輸出城市為上?;驈V州
5.3 輸出城市名稱中含有'?!值男?/span>
5.4 輸出城市名稱以'?!珠_頭的行
5.5 輸出城市名稱以'海’字結尾的行
5.6 輸出所有姓名,缺失值用Null填充
5.7 重置索引
5.8 前兩行
5.9 后兩行
5.10 2-8行
5.11 每隔3行讀取
5.12 2-8行,步長為2,即第2/4/6行
5.13 選取'語文','數(shù)學','英語'列
5.14 學號為'001'的行,所有列
5.15 學號為'001'或'003'的行,所有列
5.16 學號為'001'至'009'的行,所有列
5.17 列索引為'姓名',所有行
5.18 列索引為'姓名'至'城市’,所有行
5.19 語文成績大于80的行
5.20 語文成績大于80的人的學號和姓名
5.21 輸出'趙四'和'周七'的各科成績
5.22 選取第2行
5.23 選取前3行
5.24 選取第2行、第4行、第6行
5.25 選取第2列
5.26 選取前3列
5.27 選取第3行的第3列
5.28 選取第1列、第3列和第4列
5.29 選取第2行的第1列、第3列、第4列
5.30 選取前3行的前3列
# 5.1 輸出城市為上海
df[df['城市']=='上海']
# 5.2 輸出城市為上海或廣州
df[df['城市'].isin(['上海','廣州'])]
# 5.3 輸出城市名稱中含有'?!值男?/span>
df[df['城市'].str.contains('海', na=False)]
# 5.4 輸出城市名稱以'海’字開頭的行
df[df['城市'].str.startswith('海', na=False)]
# 5.5 輸出城市名稱以'?!纸Y尾的行
df[df['城市'].str.endswith('海', na=False)]
# 5.6 輸出所有姓名,缺失值用Null填充
df['姓名'].str.cat(sep='、',na_rep='Null')
# 5.7 重置索引
df2 = df1.set_index('學號')
# 5.8 前兩行
df2[:2]
# 5.9 后兩行
df2[-2:]
# 5.10 2-8行
df2[2:8]
# 5.11 每隔3行讀取
df2[::3]
# 5.12 2-8行,步長為2,即第2/4/6行
df2[2:8:2]
# 5.13 選取'語文','數(shù)學','英語'列
df2[['語文','數(shù)學','英語']]
# df.loc[]只能使用標簽索引,不能使用整數(shù)索引,通過便簽索引切邊進行篩選時,前閉后閉
# 5.14 學號為'001'的行,所有列
df2.loc['001', :]
# 5.15 學號為'001'或'003'的行,所有列
df2.loc[['001','003'], :]
# 5.16 學號為'001'至'009'的行,所有列
df2.loc['001':'009', :]
# 5.17 列索引為'姓名',所有行
df2.loc[:, '姓名']
# 5.18 列索引為'姓名'至'城市’,所有行
df2.loc[:, '姓名':'城市']
# 5.19 語文成績大于80的行
df2.loc[df2['語文']>80,:]
df2.loc[df2.loc[:,'語文']>80, :]
df2.loc[lambda df2:df2['語文'] > 80, :]
# 5.20 語文成績大于80的人的學號和姓名
df2.loc[df2['語文']>80,['姓名','城市']]
# 5.21 輸出'趙四'和'周七'的各科成績
df2.loc[df2['姓名'].isin(['趙四','周七']),['姓名','語文','數(shù)學','英語']]
# # df.iloc[]只能使用整數(shù)索引,不能使用標簽索引,通過整數(shù)索引切邊進行篩選時,前閉后開
# 5.22 選取第2行
df2.iloc[1, :]
# 5.23 選取前3行
df2.iloc[:3, :]
# 5.24 選取第2行、第4行、第6行
df2.iloc[[1,3,5],:]
# 5.25 選取第2列
df2.iloc[:, 1]
# 5.26 選取前3列
df2.iloc[:, 0:3]
# 5.27 選取第3行的第3列
df2.iloc[3, 3]
# 5.28 選取第1列、第3列和第4列
df2.iloc[:, [0,2,3]]
# 5.29 選取第2行的第1列、第3列、第4列
df2.iloc[1, [0,2,3]]
# 5.30 選取前3行的前3列
df2.iloc[:3, :3]
6.2 按照語文成績升序排序,默認升序排列
6.3 按照數(shù)學成績降序排序
6.4 先按語文成績升序排列,再按數(shù)學成績降序排列
6.5 語文成績80及以上
6.6 語文成績80及以上以及數(shù)學成績90分及以上
6.7 語文成績80及以上或數(shù)學成績90分及以上
6.8 輸出成績100的行和列號
6.9 增加一列“省份-城市”
6.10 增加一列總分
6.11 按照總分、語文、數(shù)學、英語成績依次排序
# 6.1 重置索引
df_last = df1.reset_index(drop=True)
# 6.2 按照語文成績升序排序,默認升序排列
df_last.sort_values('語文')
# 6.3 按照數(shù)學成績降序排序
df_last.sort_values('數(shù)學', ascending=False)
# 6.4 先按語文成績升序排列,再按數(shù)學成績降序排列
df_last.sort_values(['語文','數(shù)學'], ascending=[True,False])
# 6.5 語文成績80及以上
df_last[df_last['語文']>=80]
df_last.query('語文 > 80')
# 6.6 語文成績80及以上以及數(shù)學成績90分及以上
df_last[(df_last['語文']>=80) & (df_last['數(shù)學']>=90)]
# 6.7 語文成績80及以上或數(shù)學成績90分及以上
df_last[(df_last['語文']>=80) | (df_last['數(shù)學']>=90)]
# 6.8 輸出成績100的行和列號
row, col = np.where(df_last.values == 100)
# 6.9 增加一列“省份-城市”
df_last['省份-城市'] = df_last['省份'] + '-' + df_last['城市']
# 6.10 增加一列總分
df_last['總分'] = df_last[['語文','數(shù)學','英語']].sum(axis = 1)
# 6.11 按照總分、語文、數(shù)學、英語成績依次排序
df_last.sort_values(by =['總分','語文','數(shù)學','英語'],ascending=False )
# 6.12 新增一列表示學生語文成績等級的列(優(yōu)秀、良好、中等、不及格)
def get_letter_grade(score):
'''
定義一個函數(shù),根據(jù)分數(shù)返回相應的等級
'''
if score>=90:
return '優(yōu)秀'
elif score>=80:
return '良好'
elif score>=60:
return '中等'
else:
return '不及格'
df_last['語文等級'] = df_last['語文'].apply(lambda score: get_letter_grade(score))
7.1 一列分組
7.2 多列分組
7.3 每組的統(tǒng)計數(shù)據(jù)(橫向顯示)
7.4 每組的統(tǒng)計數(shù)據(jù)(縱向顯示)
7.5 查看指定列的統(tǒng)計信息
7.6 分組大小
7.7 分組成績最大值
7.8 分組成績最小值
7.9 分組成績總和
7.10 分組平均成績
7.11 按省份分組,計算英語成績總分和平均分
7.12 按省份、城市分組計算平均成績
7.13 不同列不同的計算方法
7.14 性別分別替換為1/0
7.15 增加一列按省份分組的語文平均分
7.16 輸出語文成績最高的男生和女生(groupby默認會去掉空值)
7.17 按列省份、城市進行分組,計算語文、數(shù)學、英語成績最大值的透視表
# 7.1 一列分組
df2.groupby('省份').groups
# 7.2 多列分組
df2.groupby(['省份','城市']).groups
# 7.3 每組的統(tǒng)計數(shù)據(jù)(橫向顯示)
df2.groupby('省份').describe()
# 7.4 每組的統(tǒng)計數(shù)據(jù)(縱向顯示)
df2.groupby('省份').describe().unstack()
# 7.5 查看指定列的統(tǒng)計信息
df2.groupby('省份').describe()['語文']
# 7.6 分組大小
df2.groupby('省份').count()
df2.groupby('省份').agg(np.size)
# 7.7 分組成績最大值
df2.groupby('省份').max()
df2.groupby('省份').agg(np.max)
# 7.8 分組成績最小值
df2.groupby('省份').min()
df2.groupby('省份').agg(np.min)
# 7.9 分組成績總和
df2.groupby('省份').sum()
df2.groupby('省份').agg(np.sum)
# 7.10 分組平均成績
df2.groupby('省份').mean()
df2.groupby('省份').agg(np.mean)
# 7.11 按省份分組,計算英語成績總分和平均分
df2.groupby('省份')['英語'].agg([np.sum, np.mean])
# 7.12 按省份、城市分組計算平均成績
df2.groupby(['省份','城市']).agg(np.mean)
# 7.13 不同列不同的計算方法
df2.groupby('省份').agg({'語文': sum, # 總和
'數(shù)學': 'count', # 總數(shù)
'英語':'mean'}) # 平均
# 7.14 性別分別替換為1/0
df2 = df2.dropna()
df2['性別'] = df2['性別'].map({'男':1, '女':0})
# 7.15 增加一列按省份分組的語文平均分
df2['語文平均分'] = df2.groupby('省份')['語文'].transform('mean')
# 7.16 輸出語文成績最高的男生和女生(groupby默認會去掉空值)
def get_max(g):
df = g.sort_values('語文',ascending=True)
print(df)
return df.iloc[-1,:]
df2.groupby('性別').apply(get_max)
# 7.17 按列省份、城市進行分組,計算語文、數(shù)學、英語成績最大值的透視表
df.pivot_table(index=['省份','城市'], values=['語文','數(shù)學','英語'], aggfunc=max)
8.1 數(shù)據(jù)匯總統(tǒng)計
8.2 列中非空值的個數(shù)
8.3 列最小值
8.4 列最大值
8.5 列均值
8.6 列中位數(shù)
8.7 列與列之間的相關系數(shù)
8.8 列的標準差
8.9 語文成績指標
# 8.1 數(shù)據(jù)匯總統(tǒng)計
df.describe()
# 8.2 列中非空值的個數(shù)
df.count()
# 8.3 列最小值
df.min()
# 8.4 列最大值
df.max()
# 8.5 列均值
df.mean()
# 8.6 列中位數(shù)
df.median()
# 8.7 列與列之間的相關系數(shù)
df.corr()
# 8.8 列的標準差
df.std()
# 8.9 語文成績指標
# 對語文列求和
sum0 = df_last['語文'].sum()
# 語文成績方差
var = df_last['語文'].var()
# 語文成績標準差
std = df_last['語文'].std()
# 語文平均分
mean = df_last['語文'].mean()
print('語文總分:',sum0)
print('語文平均分:',mean)
print('語文成績標準差:',std)
print('語文成績方差:',var)
# 8.10 三個科目的指標
mean = df_last[['語文','數(shù)學','英語']].mean()
var = df_last[['語文','數(shù)學','英語']].var()
total = df_last[['語文','數(shù)學','英語']].sum()
std = df_last[['語文','數(shù)學','英語']].std()
rows = [total,mean,var,std]
# 索引列表
index = ['總分','平均分','方差','標準差']
# 根據(jù)指定索引和行構造 DataFrame 對象
df_tmp = pd.DataFrame(rows,index=index)
9.1 示例數(shù)據(jù)
9.2 列重命名
9.3 設置空值背景紅色
9.4 最大數(shù)據(jù)高亮
9.5 最小數(shù)據(jù)高亮
9.6 部分列最大數(shù)據(jù)高亮
9.7 部分列數(shù)據(jù)高亮(Dataframe全為數(shù)據(jù))
9.8 95分以上顯示紅色
9.9 混合
9.10 設置float類型列數(shù)據(jù)大于80.0的背景高亮
9.11 設置數(shù)學成績大于80.0分的行背景高亮
9.12 設置數(shù)學成績大于95.0的行數(shù)據(jù)顏色為紅色
# 9.1 示例數(shù)據(jù)
df = pd.read_csv(filename, encoding='gbk')
# 9.2 列重命名
df.columns = ['姓名','性別','語文','數(shù)學','英語','城市','省份']
# 9.3 設置空值背景紅色
df.style.highlight_null(null_color = 'red')
# 9.4 最大數(shù)據(jù)高亮
df.style.highlight_max()
# 9.5 最小數(shù)據(jù)高亮
df.style.highlight_min()
# 9.6 部分列最大數(shù)據(jù)高亮
df.style.apply(highlight_max, subset=['語文', '數(shù)學'])
# 9.7 部分列數(shù)據(jù)高亮(Dataframe全為數(shù)據(jù))
df3 = df[['語文','數(shù)學','英語']]
def highlight_max(s):
is_max = s == s.max()
return ['background-color: yellow' if v else '' for v in is_max]
df3.style.apply(highlight_max)
# 9.8 95分以上顯示紅色
def color_negative_red(val):
color = 'red' if val > 95.0 else 'black'
return 'color: %s' % color
df3.style.applymap(color_negative_red)
# 9.9 混合
df3.style.applymap(color_negative_red).apply(highlight_max)
# 9.10 設置float類型列數(shù)據(jù)大于80.0的背景高亮
yellow_css = 'background-color: yellow'
sfun = lambda x: yellow_css if type(x) == float and x > 80.0 else ''
df3.style.applymap(sfun)
# 9.11 設置數(shù)學成績大于80.0分的行背景高亮
yellow_css = 'background-color: yellow'
sfun = lambda x: [yellow_css]*len(x) if x.數(shù)學 > 80.0 else ['']*len(x)
df3.style.apply(sfun, axis=1)
# 9.12 設置數(shù)學成績大于95.0的行數(shù)據(jù)顏色為紅色
def row_color(s):
if s.數(shù)學 > 95:
return ['color: red']*len(s)
else:
return ['']*len(s)
df3.style.apply(row_color, axis=1)
# 9.13 顯示熱度圖
import seaborn as sns
cm = sns.light_palette('green', as_cmap=True)
df3.style.background_gradient(cmap=cm)
以上就是本期為大家整理的全部內容了,喜歡的朋友可以
點贊、點在看也可以分享讓更多人知道。聯(lián)系客服