s = pandas.Series({‘key1’:value1,'key2':value2}) 生成类似字典的键值列表
s = pandas.Series([value1,value2],index=['a','b']) 生成列表,index不只是添加字段,还有选择列的作用
排序
series.sort_values(ascending=True, inplace=True) # 根据值排序, ascending是否升序 series.sort_index() # 更具索引排序
pd.set_option('display.max_columns', None) # 显示最大列数
pd.set_option('display.max_rows', None) # 显示最大行数
创建pandas.Dataframe
df = pandas.Dataframe(数据, index=[行名1, 行名2, 行名3], columns=[列名1, 列名2, 列名3, 列名4]) 由多个Series(列)组成
# 如果数据包含列名, 数据可以是Series ndarray 字典, index可以是数据的某列, columns就可以只填部分列名,以只选择部分列(并按照顺序显示,填不存在的列名就会生成空列),
# 数据不包含列, 默认列和index都是0-n,, 默认值都是数字格式
df = pandas.Dataframe(numpy.array([]))生成一列
df = pandas.Dataframe([numpy.array([]), numpy.array([])]) 根据两个array生成两行的表格,array也可以用pandas.Series()代替
df = pandas.Dataframe(numpy.arange(15).reshape(3,5)) 生成3*5(0-14)的表格
df = pandas.Dataframe({'a':pandas.Series(), 'b':pandas.Series()}) 以a和b为列名pandas为列值生成表格
df = pandas.Dataframe(dict) 根据字典生成表格
获取/修改行或列
获取列
df.columns 产看所有列名
df[x] # 获取x列, x为列名(未定义列名,就是数字列名)
df[[x1,x2]] 获取x1,x2列(未定义列名,就是数字列名)
df[x].str.split() # 如果这列是字符串类型,可以直接当作字符串操作
df[x].astype(str).str.split('/') # 把一列强制当作一种类型操作,返回一列
df[x].astype(str).str[0:3] # 获取一列的切片
获取行
df.values 返回数据的二维数组 df.head(n) 返回前n行的数据,不填为前五行 df.tail(n) 返回后n行的数据,不填为后五行 df[0:3] 返回0到2行 df.iloc[2] 返回索引为2行的数据 df.loc['name'] # 获取name列 df.loc['5']['name'] 获取5行的name修改列
df['name'] = 'Jack' # 把name列都设置为Jack df['name'] = pd.Series(['Mike','John','Sarah'],index=[1,4,6]) # 筛选赋值 df['name'] = df2['name'] # 把另一个表的列赋值给本表 df['id'][['age']>18] = 1111 # 筛选修改,原表也会被修改, df['id']不能赋值给变量 df['age'].apply(lambda x: x>5) # 可以为匿名函数也可以是函数名添加列
df['列名'] = ['数据'] 在最后添加一列 df.insert(1,'列名', 数据) 在第1列前添加一列删除列
df.drop(['列名','列名'],axis=1,inplace=True) # axis=1删除列,0删除行 inplace=True原位操作 [[[],[]],[]]]
del df['列名']
df.pop('列名')
添加行
df.append([{'列名':值,'列名':值}],ignore_index=True) # 并非原位操作,而是返回新的dataframe
df.append(df_other,ignore_index=True) 列表合并删除行
df.drop(['行名','行名'],axis=0,inplace=True) # axis=1删除列,0删除行 inplace=True原位操作
df.drop([n,m],inplace=True) 删除n行和m行
df.drop(df['id']==5,inplace=True)
df = df[(df.A!=5)&(df.B<3)] 删除A列为5且B列>=3的列
df = df[(df.index>5)] 删除索引值<=5的行数据采样(随机抽样)
df.sample(n=5,replace=True)描述统计
df.describe().round(2).T 对所有的类型为数字的列进行数据统计count(计数) mean(均值) std(标准差) min(最小) 25% 50% 75% max(最大) df['price'].std() 计算价格列标准差 df['num1'].cov(df[num2]) 计算两列的协方差 df.cov() 计算整个表的协方差 count(计数) mean(均值) std(标准差) min(最小) 25% 50% 75% max(最大) cov(协方差)相关分析
df['column1'].corr(df['column2']) 计算两列的相关系数
df.corr() 整个表数字列的相关系数修改数据
new_df = pd.dataframe({'b': ['d', 'e']}, index=[1, 2]) 更新b列的第1,2个元素
df.rename(column={'old_name':'new_name'}, replace=true) 修改列名
df['列名或不填及不做限制'].replace({'old':'new'},replace=true) # 替换
df.set_index('列名') 去掉原来的默认索引 把该列设为索引放在列表左侧
df.reset_index() 重置索引为默认索引 [0,1,2,3,......]
pandas.set_option('display.max_columns', none)
数据表清洗inplace=True 直接修改列表,False生成副本
df.dropna(how=any) 删除所有含有空值的行
df.fillna(value=a) 用a填充所有空值
df.isnull()
df['a'].astype('int') 把a列数据格式改为int
数据按列分组(筛选)
group = df.groupby('列名') 按照列名分组返回 列名 分组信息的字典
group = df.groupby(['column1','column2']) # 返回一个分组对象,并不是分组的结果
group.agg({'column3':'medium','column4':'mean'}) # 可以用任意列,同时对多列执行操作
# count(计数) mean(均值) std(标准差) min(最小) max(最大) std(标准差) var(方差) sum(求和) median(中位数)
group = df.groupby('列名').apply(lambda x:x>5) # 对分组结果筛选
group = df.groupby('列名').apply(lambda x:x) # 直接获取分组结果
df['sort_message'] = numpy.where(df['limit_message']>5, cont_of_true. cont_of_false) #数据按条件分组赋
数据筛选
df.loc[df['name'] == 'mike'] 获得name列等于mike的行,返回特定行的数据 可以是索引也可以是筛选条件
df.loc[(df['age'] >18) & (df['age'] <25)] # 联合筛选
df[df[n]>2] 获取第n列数据大于2的所有行 (首先必须定义列名,且不能为数字)
df['年龄'].isin([‘20’,‘21’]) # 判断年龄的值是否为20或21 输出索引和判断结果
df[(df['age']=='10' & df['age'] >= 15)] # 多比较条件筛选,获取 age>=15 和age=10的列, 对于float类型的数据,需要先把比较列round小数位取整, 不然会出现相同小数比较不同的情况
df['name'].str.contains('张|刘') # 模糊搜索
数据合并
df.update(new, join="left", overwrite=True, filter_func=None, raise_conflict=False) new 更新的数据, overwrite=True 覆盖原始值 False更新空值, filter_func 过滤函数输入原列表 返回布尔数组, raise_conflict=True 都非空时报错 至少一列字段相同, 不会扩大原表 df_new = pandas.concat([df1,df2,df3],axis=1,join="outer", join_axes=None,keys=None, ignore_index=true) axis 合并维度 0行 1列, join 合并方式 inner交集 outer 并集, join_axes 定义拼接列, keys df_new = pandas.merge(left,right,on='name',how='inner', left_on=None) # 数据合并 on 相对于那列合并 how合并方式 how =innner(默认, 保留on相同的行), 'left'(保留左边df的 on列出现的所有值) 'right' (保留右边dfon列出现的所有值) 'outer'(保留on列出现的所有值) how决定了, 合并结果的on列的内容 left_on 左边用于连接的列, right_on,右边用于连接的列, 列名不同,含义相同时好用 left_index 左边用于连接的行, right_index 右边用于连接的行 sort 结果是否排序 df.append(df,ignore_index=True) # 再列表末尾添加数据拆分
把列按照字符纵向分割为多列
df['name'].unique() # 获取唯一值组成的列表
for i in df['name'].unique(): # 按name类拆分
df[df['name']==i].to_csv(i+'.csv',encoding='gb180310)
把列按照字符横向分割为多列
df['name'].str.split(",",expand=True) # 把列按照逗号分隔为多列 ['name'] -> "jack,student" -> jack student
数据排序
pd.sort_values(by=[],axis=0,ascending=true,inplace=true) 对值进行排序 by=[] 排序的列 axis=0对行操作1对列操作 ascending=true 升序false降序 inplace=true 修改原表false生成拷贝 pd.sort_indexs(axis=0,ascending=true,inplace=false) set.isdisjoint(s):判断两个集合是不是不相交 set.issuperset(s):判断集合是不是包含其他集合,等同于a>=b set.issubset(s):判断集合是不是被其他集合包含,等同于a<=b累积和
pd['time'].cumsum() # 按照轴向一次累加query(查询)
时间 数据导入和导出
df=pandas.read_excel('name',low_memory=False) # low_memorys是否部分读取
df=pandas.read_csv('name',header=1)
如果读取中文csv文件出现部分编码错误,可以先用open打开文件,errors=‘ignore’
file = open('file.csv','r',errors='ignore',encoding='gb18030')
data = pd.read_csv(file,header=0,encoding='gb18030',low_memory=false)
df.to_excel('file_name.xlsx',sheet_name='',enconding='gb18030')
df.to_csv('file_name.csv')
读取mysql
my_db = pymysql.connect(host='47.104.78.62', user='root', port=3306, password='111111', db='job', charset='utf8')
连接必须有数据库参数
d = pandas.read_sql('select * from message where position like "广州"', my_db)



