tft每日頭條

 > 科技

 > pandas 多維數據分析

pandas 多維數據分析

科技 更新时间:2024-09-09 00:30:36

pandas是數據分析師最常用的工具之一,掌握以下函數足以應對工作中的各種需求,

pandas 多維數據分析(使用pandas做數據分析)1

  • P4 數據集描述
  • P5 重命名列名稱
  • P6 删除列
  • P7 整體排序
  • P8 通過列條件篩選數據
  • P9 多條件篩選
  • P11 怎樣使用axis參數
  • P12 字符串方法
  • P13 改變數據類型
  • P14 什麼時候使用groupby
  • P15 探索series
  • P16 處理缺失值
  • P17 關于index
  • P18 選擇多行或多列
  • P21 減少dataframe占用内存
  • P24 創建虛拟變量(one-hot編碼)
  • P25 時間字段處理
  • P26 去除重複項
  • P27 怎樣避免SettingWithCopyWarming
  • P28 改變顯示選項
  • P29 創建Dateframe的方式
  • P30 對DataFrame或Series使用函數

P4 數據集描述

df.describe() df.describe(include=['object']) df.shape df.dtypes

P5 重命名列名稱

df.columns df.rename(columns={'name1':'rename1', 'name2':'rename2'}, inplace=True) df_newcolumns = ['rename1', 'rename2'] df.columns = df_newcolumns # 替換列名中的字符 df.columns = df.columns.str.replace(' ', '_')

P6 删除列

df.drop('name1', axis=1, inplace=True) # axis=1 列 df.drop(['name1','name2'], axis=1, inplace=True)

P7 整體排序

df['name1'].sort_values(ascending=False) # ascending=False 倒序 df.sort_values('name', ascending=False) df.sort_values(['name1','name2'], ascending=False)

P8 通過列條件篩選數據

df[df.age>20] df.loc[df.age>20, 'name1']

P9 多條件篩選

df[(df.name1>10) & (df.name2<0)] df[(df.name1>10) | (df.name2<0)] df[df.name1.isin(['key1', 'key2', 'key3'])]

P11 怎樣使用axis參數

df.drop('name',axis=1) df.mean(axis=0) # 每列的均值 df.mean(axis=1) # 每行的均值

pandas 多維數據分析(使用pandas做數據分析)2

P12 字符串方法

# name1列轉大寫 df.name1.str.upper() df.name1.str.contain('hah') # 返回True/False df[df.name1.str.contain('hah')] # 用于篩選

P13 改變數據類型

df.name = df.name.astype(float) df = pd.read_csv(dtype={'name1':float}) # 布爾型裝換位0、1 df.name1.astype(int)

P14 什麼時候使用groupby

df.groupby('name1').name2.mean() df.groupby('name1').name2.agg(['count','mean', 'max', 'min']) df.groupby('name1').mean() # 得到所有列的均值 對每列使用不同的聚合函數怎麼做

pandas 多維數據分析(使用pandas做數據分析)3

P15 探索series

# 一列中每個元素的數量 df.name.value_counts() # 默認不計算缺失值,如果要計算需要(dropna=False) # 一列中每個元素的占比 df.name.value_counts(normalize=True) # 一列中每個元素 df.name.unique() # 一列中元素數量 df.name.nunique() pd.crosstab(df.name1, df.name2) # 價差表

P16 處理缺失值

# 查看是否是缺失值 df.isnull()/df.notnull() # 查看每個特征缺失值數量 df.isnull().sum() df.dropna(how='any') # 删除所有包含缺失值的行 df.dropna(how='all') # 删除所有值都是缺失值的行 df.dropna(subset=['name1', 'name2'], how='any') # 删除這兩列中包含缺失值的行 # 填充缺失值 df['name'] = df['name'].fillna(value='hah', inplace=True)

P17 關于index

# 重置index df.set_index('name1', inplace=True) df.reset_index(inplace=True) # 改變index的name df.index.name = None df.index.name = 'hdah' pd.concat([df1, series1], axis=1) # 可以合并dataframe和series

P18 選擇多行或多列

df.loc # 使用标簽名稱 df.loc[1:3,:] # 包含1和3 df.iloc # 使用位置 df.iloc[1:3,:] # 包含1不包含3

P21 減少dataframe占用内存

pandas 多維數據分析(使用pandas做數據分析)4

# 查看個字段占用内存 df.memory_usage(deep=True) # 為object加上自定義大小順序 df['name'] = df['name'].astype('category', categories=['good', 'good1', 'good2'], ordered=True)

P24 創建虛拟變量(one-hot編碼)

df['new_name'] = df.name.map({'x':1, 'y':2}) # 把name列中的x改為1,y改為2 pandas.get_dummies(df.sex, prefix='sex') # 離散特征重新編碼,以x開頭 pandas.get_dummies(df, columns=['name1', 'name2'], drop_first=True) # drop_first參數默認為False,删除結果中的第一列。

P25 時間字段處理

# 字符串切片 df.name1.str.slice(-5,-3) # 日期處理函數 df['time'] = pd.to_datetime(df.time) # 其他方法(.dt.) df.time.dt.weekday or weekday_name 返回周幾 df.time.dt.dayofyear 返回一年中的第幾天 # 作為篩選條件 ts = pd.to_datetime('1/1/2019') df.loc[df.times>ts, :] # 日期之間的數學計算 (df.times.max() - df.times.min()).days

P26 去除重複項

# 重複個數 df.name.dumplicated().sum() df.dumplicated().sum() # 重複項明細 df.loc[df.dumplicated(keep=False), :] keep參數,False全部顯示,first顯示做後一個,last顯示第一個; # 删除重複想 df.drop_dumplicates(keep=last) df.drop_dumplicates(subset=['name1', 'name2'])

pandas 多維數據分析(使用pandas做數據分析)5

P27 怎樣避免SettingWithCopyWarming

盡量使用loc,避免直接copy 經過多級篩選之後,pandas不确定當前Dateframe是否是copy過來的,所以,對當前dateframe操作時,不确定是否為影響最初的數據集,而爆出SettingWithCopyWarming,可以在最初拷貝數據集的時候使用copy方法;

P28 改變顯示選項

主要方法 pandas.get_option() 顯示所有行 pd.set_option('display.max_rows', None) 默認顯示60行 pd.set_option('display.max_rows', None) 其他選項 最大列數:display.max_columns 最大單元格寬度:display.max_colwidth 小數點位數:display.precision 查看目前選項: pd.describe_option() pd.describe_option('rows') 重置所有默認選項 pd.reset_option('all')

P29 創建Dateframe的方式

1 字典 pd.DataFrame({'id':[1,2,3], 'name':['hah','jjj','kk']}, columns=['id2', 'name2'], index=['x','y','z']) 2 列表 pd.DataFrame([[1,2,3], ['x','v','b'], [1,'5','x']]) 一個子列表為一行 3 使用numpy arr = np.random.rand(4,2) 4行2列 pd.DataFrame(arr) 4 字典結合numpy pd.DataFrame({'id':np.arrange(100,110,1), 'name':np.random.randint(60, 101,10)}) 5 連接DataFrame和Series' pd.concat([df,s], axis=1)

P30 對DataFrame或Series使用函數

map df['name1'] = df.name.map({'x':1, 'y':2}) apply df[name1] = df.name,apply(len) df[name1] = df.name,apply(np.ciel) def fun(x,y): return x[y] df.name.apply(fun, y=2 df.apply(max, axis=0) 每一列的最大值 df.apply(max, axis=1) 每一行的最大值 df.apply(np.argmax, axis=1) 每一行的最大值對應的列名 applymap 針對全局每一個單元格做操作 df.applymap(float)

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved