本文为 落魄陶陶 原创,转载请注明出处
pandas
Series
s = pd.Series([1,2,3,None,5,6]) # 默认情况,索引下标是数字
s = pd.Series([1,2,3,None,5,6],index=['a','b','c','d'])
s.index
s.values # 类型为np.array
Series 是对np.array等封装,values为原始的np.array,index为附加
切片
s[2:5]
s[::2]
# 索引赋值
```python
s.index.name='索引'
s.index=list('abcdef')
s['a':'c']
DataFrame
构造时间序列
date = pd.date_range('20180101',periods=6)
创建DataFrame
df = pd.DataFrame(np.random.randn(6,4))
df = pd.DataFrame(np.randmo.randn(6,4),index=date,columns=list('ABCD'))
df2 = pd.DataFrame({'A':1.,'B':pd.Timestamp('20180101'),'C':pd.Series(1,index=list(range(4)),dtype=float),})
df2.dtypes
查看数据
头尾数据
df.head() # 默认前五行
df.head(10)
df.tail()
df.tail(4)
下标
使用index属性查看
df.index
列标使用columns
df.columns
数据使用values
df.values
读取数据集数据操作
df = pd.read_excel('豆瓣电影数据.xlsx')
行操作
df.iloc[0] # 查看第一行
df.iloc[0:5] # 前开后闭
df.loc[0:5] # 闭区间
添加行
dit = {'名字':'复仇者联盟3','投票人数':123456,'影片类型':'剧情/科幻','上映时间':'2018-05-01 00:00:00','时长':120,'年代':2018}
s = pd.Series(dit)
s.name = 38738 # name就是index
df = df.append(s)
df[-5:]
删除行
df = df.drop(38738)
df[-5:]
# 列操作
```python
df.columns
df['名字'][:5] # 前五的名字
df[['名字','类型']] # 多列
增加一列
df['序号'] = range(1,len(df)+1)
df.drop('序号',axis=1)
通过标签选择数据
df.loc[1,'名字']
df.loc[[1,3,5,7,9],['名字','评分']]
条件选择
df[df['产地']=='美国'][:5]
df[(df['产地']=='美国')&(df['评分']>9)][:5]
df[(df.产地=='美国')&(df.评分>9)][:5]
缺失值和异常值处理
dropna fillna isnull notnull
判断缺失值
df.isnull()
df['名字'].isnull()
df[df['名字'].isnull()][:10]
填充缺失值
df[df['评分'].isnull()][:10]
df['评分'].fillna(np.mean(df['评分']),inplace=True)
删除缺失值
dropna how=‘all’,inplace=True,axis=0
df.dropna(inplace=True,axis=0)
处理异常值
df[df['投票人数']<0]
df = df[df['投票人数']>0]
df.to_excel('movie_data.xlsx')
数据格式转换
df['投票人数'].dtype
df['投票人数']=df['投票人数'].astype(int)
df.loc[14934,'年代']=2008
df.drop([31172],inplace=True)
排序
默认排序
df.sort_values(by='投票人数',ascending=False)
df.sort_values(by='年代')
df.sort_values(by=['评分','投票人数'],ascending=False)
统计分析
描述性统计
df.describe()
df.drop(df[df['年代']>2018].index,inplace=True)
df.index = range(1,len(df))
df['投票人数'].max()
df['投票人数'].min()
df['投票人数'].mean()
df['投票人数'].median()
df['投票人数'].var()
df['投票人数'].std()
df['投票人数'].sum()
df[['投票人数',''评分]].corr()
df[['投票人数',''评分]].cov()
len(df)
df['产地'].unique()
df['产地'].replace('USA','美国',inplace=True)
df['产地'].replace(['西德','苏联'],['德国','俄罗斯'],inplace=True)
df['年代'].unique()
df['年代'].value_counts()
df['产地'].value_counts()[:5]
df.to_excel('movie_data.xlsx')
数据透视
pd.set_option('max_columns',100)
pd.pivot_table(df,index=['年份'])
pd.pivot_table(df,index=['年代','产地'])
pd.pivot_table(df,index=['年代','产地'],values=['评分'])
pd.pivot_table(df,index=['年代','产地'],values=['投票人数'],aggfunc=np.sum)
pd.pivot_table(df,index=['产地'],values=['投票人数','评分'],aggfunc=[np.sum,np.min])
pd.pivot_table(df,index=['产地'],aggfunc=[np.sum,np.min],fill_value=0)
pd.pivot_table(df,index=['产地'],aggfunc=[np.sum,np.min],fill_value=0,margin=True)
pd.pivot_table(df,index=['产地'],values=['投票人数','评分'],aggfunc={'投票人数':np.sum,'评分':np.min},fill_value=0)