python数据表_第1关:了解python数据表操作
如果你已經(jīng):安裝好python
有一點(diǎn)python語言基礎(chǔ)
而且沒有過系統(tǒng)化的python學(xué)習(xí)
希望掌握常見的dataframe處理方法
這篇文章將幫助你掌握工作中常用的工作表操作。
文章閱讀時(shí)間約40min。
1. 導(dǎo)入package:pandas
import pandas as pd
2. 數(shù)據(jù)讀取與保存讀取文件
temp = pd.read_excel("file_path",sheet_name= "sheet_name" ) # sheet_name可以缺省
temp_1 = pd.read_csv("file_path",encoding='utf-8') #file_path不可以出現(xiàn)中文;也可以用來讀取txt文件;encoding可以缺省
temp_2 = pd.read_csv("file_path",encoding='gbk') #輸出文件
# 輸出單個(gè)文件
temp.to_excel('file_path',index=False) # 通過設(shè)置index參數(shù)確定是否保留dataframe中的index
temp_1.to_csv('file_path',index=False,encoding='utf-8')輸出多個(gè)文件到同一個(gè)excel中
writer = pd.ExcelWriter('file_path') # 生成一個(gè)新的文件
temp_2.to_excel(writer,sheet_name='temp_2') # 保存第一個(gè)表格 temp_2
temp_3.to_excel(writer,sheet_name='temp_3') # 保存第二個(gè)表格 temp_3
writer.save()創(chuàng)建新的dataframe
# 使用list創(chuàng)建df
df = pd.DataFrame([[np.nan, 2, np.nan, 0],
[3, 4, np.nan, 1],
[np.nan, np.nan, np.nan, 5],
[np.nan, 3, np.nan, 4]],
columns=list('ABCD'))
#通過字典創(chuàng)建df
test_dict = {'A':[np.nan,3,np.nan,np.nan],
'B':[2,4,np.nan,3],
'C':[np.nan,np.nan,np.nan,np.nan],
'D':[0,1,5,4]}
df = pd.DataFrame(test_dict)
3. 數(shù)據(jù)初步描述
# 查看前幾行與后幾行
temp.head()
temp.tail()
# 查看df行列數(shù)
temp.shape
temp.shape[1] # 單獨(dú)查看列數(shù)
# 查看df各變量描述性統(tǒng)計(jì)
temp.describe()
temp.info()
# 查看df列名
temp.columns
4. 數(shù)據(jù)行列操作
4.1 修改列名
### 修改全部列名
temp.columns = ["col_name1","col_name2",...] #需與temp表列數(shù)相同
### 修改部分列名
temp_1 = temp.copy()
temp_1.rename(columns={'Province':'省份'},inplace=True)
### 將表格列名放入list中
cols = temp_1.columns.tolist()
4.2 增減行列增加一列
temp['test'] = 1
#通過原有列簡(jiǎn)單計(jì)算
temp['test2'] = temp['Value'] + temp['test']
#基于原有列增加列
temp['test3'] = temp['Value'].apply(lambda x: '>100' if x>100 else '<=100')
temp[(temp['col_name']> 0) &(temp['col_name']== 0) ,'new_col_name'] = 1基于原有多列增加列
def cal_label(province,value):
if (province in ['北京','上海','廣東']) & (value>1000):
return 'High'
elif (province in ['西藏','新疆','海南']) & (value<100):
return 'Low'
else:
return 'Medium'
temp['test4'] = temp.apply(lambda x: cal_label(x['Province'],x['Value']),axis=1)刪除行列
temp.drop("row_name",axis=0).head()
temp.drop("col_name",axis=1).head()
del temp["period"]
4.3 行列切片與數(shù)據(jù)選擇簡(jiǎn)單行切片
## 選取第2-4行
temp[2:5]
## iloc用法:通過行數(shù)篩選,eg:選擇第4行
temp.iloc[3]
## 選擇行index為"2020-01"的行
temp.loc["2020-01"]根據(jù)條件做行篩選
1.邏輯判斷符號(hào):
- "|" 代表 "or";
- "&" 代表 "and";
- "==" 代表 "等于";
- "~" 代表 "非"
Note:
1. 每個(gè)條件之間需要放括號(hào);
2. 不要使用"="作為邏輯判斷
## 篩選出col_name列<=3的所有行
temp[temp["col_name1"]<=3]
list(temp["col_name2"][temp["col_name1"]<=3])列切片
temp[['col_name1','col_name2']]
temp.iloc[:,1:3]
## 選擇連續(xù)行、連續(xù)列
temp.iloc[2:5,1:3]
## 選擇非連續(xù)行、非連續(xù)列
temp.iloc[[1,2,4],[1,3]]
## 用冒號(hào)表示所有行/所有列
temp.iloc[1:3,:]
temp.iloc[:,1:3]
## 選擇某個(gè)值
temp.iloc[0,0]
## 條件篩選
temp[temp['Province']=='上海']
temp[temp['Province'].isin(['上海','北京'])] # isin是用list篩選
temp[~(temp['Province'].isin(['上海','北京']))]
5. dataframe相關(guān)用法索引:index
temp = temp.reset_index()
temp = temp.set_index(["col_name"])排序:sort
temp = temp.sort_values(by=['Province','Period']).head()
temp = temp.sort_values(by=['Value'],ascending=False).head()去重:drop_duplicates
temp["col_name1"].unique()
## 按某列值去重
temp.drop_duplicates(subset=['Province']).head() #可以添加keep = first類似的參數(shù)
## 去重同時(shí)保留最大值
temp = temp.sort_values(by=['Province','Value'])
temp.drop_duplicates(subset=['Province'],keep='last').head()空值:dropna/fillna
df.isnull().sum()
#刪除缺失值記錄
df.dropna(subset=['A','B'], how='all')
#填補(bǔ)缺失值
df.fillna(0)用指定值填充/替換
values ={'col_name1':0,'col_name2':1,'col_name3':2}
df.fillna(value=values)
temp['col_name'].replace('a','A',inplace=True)
temp.head()寬表轉(zhuǎn)長(zhǎng)表,長(zhǎng)表轉(zhuǎn)寬表
## 長(zhǎng)轉(zhuǎn)寬:
temp_pivot = pd.pivot_table(temp, values='Value', # 列變行之后的值
index=['Period'], # 保留的列值
columns=['Province'], # 列變行之后,列名
aggfunc=np.sum).reset_index()
### 長(zhǎng)轉(zhuǎn)寬之后轉(zhuǎn)換行名為單一維度
temp_pivot.columns = ["".join((j)) for i,j in temp_pivot.columns]
## 寬轉(zhuǎn)長(zhǎng):
tepm_melt = pd.melt(temp_pivot,
id_vars=['Period'],# 保留的列值
value_vars=['上海', '云南', '內(nèi)蒙古', '北京', '吉林',
'四川', '天津', '寧夏', '安徽', '山東', '山西', '廣東', '廣西', '新疆', '江蘇', '江西', '河北',
'河南', '浙江', '海南', '湖北', '湖南', '甘肅', '福建', '西藏', '貴州', '遼寧', '重慶', '陜西',
'青海', '黑龍江'],# 轉(zhuǎn)換為列值
var_name='Province',# 列名
value_name='value')
6. 值統(tǒng)計(jì)
6.1 統(tǒng)計(jì)值
temp.loc["max"] = temp.max(axis=0)
## 針對(duì)離散型變量對(duì)每個(gè)值計(jì)數(shù)
temp['Province'].value_counts()
## 統(tǒng)計(jì)每個(gè)值占比
temp['Province'].value_counts(normalize=True)
## 非重復(fù)值計(jì)數(shù)
temp['Province'].nunique()
## 對(duì)數(shù)值型變量進(jìn)行基本的描述性統(tǒng)計(jì)
temp['Value'].describe()
6.2 數(shù)據(jù)計(jì)算group by
temp_groupby = temp.groupby(['Period','Province'])['Value'].sum().reset_index().sort_values(by=['Period'])
data1['排名'] = data1.groupby(['月份','小區(qū)'])['響應(yīng)率'].rank(ascending=0, method='min')分組排名
temp = temp.groupby(['Period'])['Value'].sum().reset_index().sort_values(by=['Period','Value'])
temp['rank'] = temp['Value'].groupby(temp['Period']).rank(ascending=1,method='dense')
temp.tail(10)
7. 數(shù)據(jù)合并merge,根據(jù)某列匹配兩個(gè)表格
df1.merge(df2, on = ["key"], how='right')
# 當(dāng)左右表格鍵名不一致時(shí)使用
df3.merge(df4, left_on='lkey',right_on='rkey')concat
# 需要保證列名/行數(shù)相同
## 行連接|列對(duì)齊
pd.concat([data1,data2,data3],keys=['data1','data2','data3'])
## 列連接|行對(duì)齊
pd.concat([data1,data2,data3],axis =1,keys =['data1','data2','data3'])
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的python数据表_第1关:了解python数据表操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图片占位问题
- 下一篇: python实现语音播放_用Python