1. 程式人生 > >python資料處理的常用操作

python資料處理的常用操作

微信公眾號:資料運營人
本系列為博主的讀書學習筆記,如需轉載請註明出處。

1.生成資料

2.資料表檢查

3.資料表清洗

4.資料預處理

5.資料提取

6.資料篩選

7.資料彙總

8.資料統計

9.資料輸出

1.生成資料
1.匯入資料表

1df = pd.read_excel('C:/Users/Admin/Desktop/types/output.xlsx')
2df1 = pd.read_csv('C:/Users/Admin/Desktop/types/output.csv')

2.建立資料表

1df = pd.DataFrame(({"id": [1001, 1002, 1003, 1004, 1005, 1006],
2 "date": pd.date_range('20130102', periods=6),
3 "city": ['Beijing ', 'SH', ' guangzhou ', 'Shenzhen', 'shanghai', 'BEIJING '],
4 "age": [23, 44, 54, 32, 34, 32],
5 "category": ['100-A', '100-B', '110-A', '110-C', '210-A', '130-F'],
6 "price": [1200, np.nan, 2133, 5433, np.nan, 4432]}))

返回結果:

2.資料表檢查
1.檢視維度(行列)

1df.shape

(6, 6)

2.資料表資訊

1df.info()

返回結果:

3.檢視資料格式

1# 檢視資料表各列格式
2print(df.dtypes)
3# 檢視資料表單列格式
4print(df['city'].dtype)

返回結果:

4.檢視空值

1# 檢查資料是否為空值
2print(df.isnull())
3# 檢查特定列是否為空值
4print(df['price'].isnull())

返回結果:

5.檢視唯一值

1# 檢視city列中的唯一值
2print(df['city'].unique())

['Beijing ' 'SH' ' guangzhou ' 'Shenzhen' 'shanghai' 'BEIJING ']

6.檢視資料表資料

1print(df.values)

返回結果:

7.檢視列名稱

1print(df.columns)

Index(['id', 'date', 'city', 'age', 'category', 'price'], dtype='object')

8.檢視前多少行資料

1# 不設定值時,預設為5行
2print(df.head(3))

返回結果:

9.檢視後多少行資料

1# 不設定值時,預設為5行
2print(df.tail(3))

返回結果:

3.資料表清洗
1.處理空值(刪除或填充)

1# 刪除資料表中含有空值的行
2df.dropna(how='any')

返回結果:

1# 使用資料0填空資料表中空值
2df.fillna(value=0)

返回結果:

1# 使用price均值對NA進行填充
2print(df['price'].fillna(df['price'].mean()))

返回結果:

2.清理空格

1# 清除city欄位中的字元空格
2df['city'] = df['city'].map(str.strip)

3.大小寫轉換

1# city列大小寫轉換
2df['city'] = df['city'].str.lower()

返回結果:

4.更改資料格式

1# 更改資料格式
2df['age'] = df['age'].astype(int)

5.更改列名稱

1df.rename(columns={'category': 'category-size'})

返回結果:

6.刪除重複值

1print(df['city'])

返回結果:

1# 刪除後出現的重複值(第一次的beijing被保留,最後出現的beijing被刪除)
2print(df['city'].drop_duplicates())

返回結果:

1# 設定keep='list'引數後,與之前刪除重複值的結果相反,第一位出現的beijing被刪除,保留最後一位出現的beijing
2print(df['city'].drop_duplicates(keep='last'))

返回結果:

7.數值修改及替換

1# 資料替換
2print(df['city'].replace('sh', 'shanghai'))

返回結果:

4.資料預處理
1.資料表合併

1df1 = pd.DataFrame({'id': [1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008],
2 'gender': ['male', 'female', 'male', 'female', 'male', 'female', 'male', 'female'],
3 'pay': ['Y', 'N', 'Y', 'Y', 'N', 'Y', 'N', 'Y'],
4 'm-point': [10, 12, 20, 40, 40, 40, 30, 20]})

返回結果:

1# 資料表匹配合並
2# 內連線
3df_inner = pd.merge(df, df1, how='inner')

返回結果:

1# 左連線
2df_left = pd.merge(df, df1, how='left')

返回結果:

1# 右連線
2df_right = pd.merge(df, df1, how='right')

返回結果:

1# 外連線
2df_out = pd.merge(df, df1, how='outer')

返回結果:

2.設定索引列

1print(df_inner.set_index('id'))

返回結果:

3.排序(按索引,按數值)

1# 按特定列的值排序
2print(df_inner.sort_values(by=['age'])) # 預設升序,降序ascending=False

返回結果:

1# 按索引列排序
2print(df_inner.set_index(keys='date')) # 行索引進行排序

返回結果:

4.資料分組

1# 如果price列的值>3000,group列顯示high,否則顯示為low
2df_inner['group'] = np.where(df_inner['price'] > 3000, 'high', 'low')
3
4# 對複合多個條件的資料進行分組標記
5# 對city列等於beijing並且price列大於等於4000的資料標記為1
6df_inner.loc[(df_inner['city'] == 'beijing') & (df_inner['price'] >= 4000), 'sign'] = 1

返回結果:

5.資料分列

1# 對category欄位的值依次進行分列,並建立資料表,索引值為df_inner的索引列,列名稱為category和size
2split = pd.DataFrame((x.split('-') for x in df_inner['category']), index=df_inner.index, columns=['category', 'size'])
3print(split)

返回結果:

1# 將完成分列後的資料表與原df_inner資料表進行匹配
2df_inner = pd.merge(df_inner, split, right_index=True, left_index=True)
3print(df_inner)

返回結果:

5.資料提取
1.按標籤提取(loc)

1# 按索引提取單行的資料
2print(df_inner.loc[3])

返回結果:

1# 按索引提取區域行數值
2print(df_inner.loc[0:5]) # 提取0到5的資料行

返回結果:

1# 設定日期為索引
2df_inner = df_inner.set_index('date')

返回結果:

1# 重設索引
2print(df_inner.reset_index()) # 恢復索引

返回結果:

1# 提取4日之前的所有資料
2print(df_inner[:'2013-01-04']) # 從開始提取到這個日期

返回結果:

2.按位置提取(iloc)

1# 使用iloc按位置區域提取資料
2print(df_inner.iloc[:3, :2]) # 行列

返回結果:

1# 使用iloc按位置單獨提取資料
2print(df_inner.iloc[[0, 2, 5], [4, 5]])

返回結果:

3.按標籤和位置提取(ix)

1# 使用ix按索引標籤的位置混合提取資料
2print(df_inner.ix[:'2013-01-03', :4])

返回結果:

4.按條件提取(區域和條件值)

1# 判斷city列的值是否為beijing
2print(df_inner['city'].isin(['beijing']))

返回結果:

1# 先判斷city列裡是否包含beijing和shanghai,然後將複合條件的資料提取出來
2print(df_inner.loc[df_inner['city'].isin(['beijing', 'shanghai'])])
3category = df_inner['category_x']
4print(category)

返回結果:

1# 提取前三個字元,並生成資料表
2print(pd.DataFrame(category.str[:3]))

返回結果:

6.資料篩選
使用‘與’條件進行篩選

1# 篩選大於25歲並且城市為北京的這些列['id', 'city', 'age', 'category_x', 'gender']的值
2print(df_inner.loc[
3(df_inner['age'] > 25) & (df_inner['city'] == 'beijing'), ['id', 'city', 'age', 'category_x', 'gender']])

返回結果:

使用‘或’條件篩選

1# 篩選大於25歲或城市為北京的這些列['id', 'city', 'age', 'category_x', 'gender']的值,並按照年齡對其進行排序
2print(df_inner.loc[
3(df_inner['age'] > 25) | (df_inner['city'] == 'beijing'), ['id', 'city', 'age', 'category_x',
4'gender']].sort_values(by='age'))
5print(df_inner.loc[
6(df_inner['age'] > 25) | (df_inner['city'] == 'beijing'), ['id', 'city', 'age', 'category_x',
7'gender']].sort_values(by='id').city.count())

返回結果:

6

使用query函式進行篩選

1# 篩選出city列等於beijing或者shanghai的
2print(df_inner.query('city == ["beijing","shanghai"]'))
3print(df_inner.query('city == ["beijing","shanghai"]').price.sum())

返回結果:

5632.0

7.資料彙總
1.分類彙總

1# 對所有列進行計數彙總
2print(df_inner.groupby('city').count())

返回結果:

1# 按照城市對id欄位進行彙總計數
2print(df_inner.groupby('city')['id'].count())

返回結果:

1# 對兩個欄位進行彙總計數
2print(df_inner.groupby(['city', 'size'])['id'].count())

返回結果:

1# 對city欄位進行彙總並計算price的合計和均值
2print(df_inner.groupby('city')['price'].agg([len, np.sum, np.mean]))

返回結果:

2.資料透視

1# 資料透視表
2# 設定city為行欄位,size為列欄位,price為值欄位
3print(pd.pivot_table(df_inner, index=["city"], values=["price"], columns=["size"],
4aggfunc=[len, np.sum], fill_value=0, margins=True))

返回結果:

8.資料統計
1.資料取樣

1# 簡單的資料取樣(隨機抽取3條資料)
2print(df_inner.sample(n=3))

返回結果:

1# sample函式中的引數replace,用於設定取樣數是否放回

2# 取樣後不放回
3print(df_inner.sample(n=6, replace=False))

返回結果:

1# 取樣後放回
2print(df_inner.sample(n=6, replace=True))

返回結果:

2.描述統計

1# 資料表描述性統計
2print(df_inner.describe())

返回結果:

3.標準差

1print(df_inner['price'].std())

1966.6385026231944

4.協方差

1# 兩個欄位間的協方差
2print(df_inner['price'].cov(df_inner['m-point']))

28771.666666666664

1# 資料表中所有欄位間的協方差
2print(df_inner.cov())

返回結果:

5.相關分析

1print(df_inner['price'].corr(df_inner['m-point']))

0.9753247017958027

1# 資料表相關性分析
2print(df_inner.corr())

返回結果:

9.資料輸出
1.寫入Excel

1# 輸出到Excel格式
2df_inner.to_Excel('excel_to_python.xlsx',sheet_name='bluewhale')

2.寫入csv

1# 輸出到CSV格式
2df_inner.to_csv('excel_to_python.csv')