1.生成数据表
1.1 Series 创建
s1=pd.Series([1,2,3,4])
s2=pd.Series([1,2,3,4,],index=['a','b','c','d'])
s3 = pd.Series({'a':1,'b':2})
1.2 series 转换为 dataframe
s1.to_frame()
s2.to_frame().T
1.3 Dataframe创建
array = [[1,2,3],[3,4,5]]
df = pd.DataFrame(array)
dict = {'name':['datafrog','data','frog'],'age':[18,19,18]}
df = pd.DataFrame(dict)
1.4 导入文件(csv,xlsx)
df = pd.DataFrame(pd.read_csv('name.csv',header=1))
df = pd.DataFrame(pd.read_excel('name.xlsx'))
df = pd.read_csv('stocks.csv',header=0,skiprows=[1,2])
df = pd.read_csv('stocks.csv',keep_default_na=False)
1.5 连接SQL
import pandas as pd
import sqlalchemy
sql='select * from stu'
engine = sqlalchemy.create_engine('mysql+pymysql://root:mysql@localhost:3306/data')
df = pd.read_sql(sql,engine)
df1 = pd.DataFrame({'name':['zhangsan','wagnwu','zhaoliu'],
'age':[18,19,17]})
df.to_sql('stu',engine,index=False,if_exists='append')
2. 数据表Dataframe的查看
2.1 获取行索引,列索引,行列索引
df.index
df.columns
df.axes
2.2 修改列索引,以某列作为行索引
df.columns=(['a','b','c'])
df.set_index('b')
2.3 查看表格整体情况,查看各列的类型,查看各项统计值
df.info()
df.dtypes
df.describe()
2.4 查看前x行,查看后x行,查看行*列,查看有多少行多少列
df.head()
df.tail()
df.size
df.shape
2.5 查看某列有多少种值
df.age.uique()
chipo['item_name'].nunique()
2.6 查看某列各种值的个数
df.age.value_counts()
2.7 根据列进行排序
df.sort_values('name')
df.sort_values(['name','age'],ascending=[True,False])
2.8 查看最大值,最小值,求和,每列最值索引
df.max()
df.min()
df.sum()
df.idxmax()
2.9 累加求和
df.cumsum()
3.数据清洗
nun值填充
df.fillna(0)
4.数据预处理
修改列索引
df.columns=(['name','age','sex'])
df.rename(columns={'姓名':'name', '年龄':'age', '性别':'sex'},inplace=True)
替换一个值
df.replace({'name':{'zz':'zzz'}})
df.name.replace({'zz':'zzz'})
增加一列,删除一列,删除一行
df['height']=1
del df['height']
df.drop(labels=0)
修改一列的多个值
df.sex=df.sex.map({'男':'male','女':'female'})
5.数据提取
iloc与loc区别
- loc是基于索引的,左闭右闭
- iloc是基于位置的,左闭右开
重新设置索引,将某一列设置为索引
df.reset_index()
df.set_index('用户ID')
设置日期为索引,提取某一天之前的所有行
df_inner=df_inner.set_index('date')
df_inner[:'2013-01-04']
使用loc提取一行,提取多行
df.loc[2]
df.loc[[0,1,2]]
df.loc[0:3:2]
使用loc提取某一列的多行
df.loc[0:5,'年龄']
使用loc提取一个条件下的所有行
b1=df['年龄']>30
df.loc[b1]
df.loc[df['年龄']>18,:]
使用iloc按位置区域提取多行多列
df.iloc[:3,:2]
使用iloc按位置单独提起数据
df.iloc[[0,2,5],[4,5]]
选取一列,选取多列
df['年龄'].head()
df[['年龄','城市']].head()
df.age
选取行和列
df.loc[0,'年龄']
df.loc[0:3,['年龄','性别']]
df.iloc[0:3,0:2]
判断city列的值是否为北京
df[‘city’].isin([‘beijing’])
判断city列里是否包含beijing和shanghai,将符合条件的数据提取出来
df.loc[df_inner[‘city’].isin([‘beijing’,’shanghai’])]
提取前三个字符,并生成数据表
pd.DataFrame(category.str[:3])
6.数据关联
concat拼接
pd.concat([left,right])
pd.concat([left,right],ignore_index=True)
pd.concat([left,right],axis=1
merge拼接
result=pd.merge(left,right,on='key')
result=pd.merge(left,right,on=['key1',‘key2’])
result = pd.merge(left, right, how='left', on=['key1', 'key2'])
result = pd.merge(left, right, how='right', on=['key1', 'key2'])
result = pd.merge(left, right, how='outer', on=['key1', 'key2'])
pd.merge(left,right,left_on = ['key1','key2'],right_on = ['key3','key4'])
left.set_index('key1',inplace=True)
right.set_index('key3',inplace=True)
pd.merge(left,right,left_index=True,right_index=True)
6.数据聚合
- 主要函数是groupby和pivote_table
按照列分组
gb_dis=df.groupby('district')
按照区域进行计数
df.groupby('district').count()
按照区域进行计数并排序
df.groupby('district').count().sort_values('user_id')
按区域对userid进行计数
df.groupby('district')['user_id'].count()
按照城市,区域对userid进行计数
df.groupby(['city','district'])['user_id'].count()
按照区域分组后,对每个列都求均值,和
gb_dis=df.groupby('district')
gb_dis.agg([np.mean,np.sum])
df.groupby('district').agg([sum,np.mean])
按照区域分组后,针对具体的列进行聚合
df.groupby('district').age.agg([np.mean,np.sum,np.std])
按照区域分组后,不同列不同聚合函数
df.groupby('district').agg({"age":np.mean,"novip_buy_times":np.sum})