对于缺失数据,如果缺失比例高于30%,那么我们会选择放弃这个 指标,即做删除处理。而对于缺失比例低于30%的指标,我们一般进行 填充处理,即使用0、均值或者众数等进行填充
当用find查找某一字符是否存在于 某个字符串中时,如果存在则返回该字符的具体位置,如果不存在则返 回-1
strip()函数,该函数用来移除字符串首尾的 指定字符,默认移除字符串首尾的空格或换行符
将列表B合并到列表A中,用到的方法是A.extend(B),将列表A合并 到列表B中,用到的方法是B.extend(A)
index获取值出现的位置,就是看该值位于列表中的哪里。
pop()函数是根据列表中的位置进行删除,也就是删除指定位置的值。
remove()函数是根据列表中的元素进行删除,也就是删除某一元素
列表生成式
num=[1,2,3,4,5]
[i**2 for i in num]
a=map(lambda x,y:x+y,[1,2,3],[3,2,1])
a
<map at 0x1b0260d29b0>
for i in a:
print(i)
4
4
4
b=list(map(lambda x,y:x+y,[1,2,3],[3,2,1]))
b
[4,4,4]
import module_name #直接导入具体模块名
from modulel import module2 #从一个较大的模块中导入较小的模块
import pandas as pd
S1=pd.Seriess(["a","b","c","d"])
S1
0 a
1 b
2 c
3 d
pd.read_excel('file_path',sheet_name='**',index_col=n,header=0)
#index_col表示用.xlsx文件中的第几列做行索引,从0开始计数。
#header参数值默认为 0,即用第一行作为列索引;输入0和None是不一样的
#也可以是其他行,只需要传入具体的那一 行即可;
#usecols参数来指定要导入的列,可以输入一个列表[0,2]
pd.read_csv('file_path',sep='',nrows=n,encoding='',engine='python',parse_dates=['时间'])
#sep为分割符号
#nrows为读取前几行
#Python用得比较多的两种编码格式是UTF-8和gbk,默认编码格式是 UTF-8。
#如果是CSV UTF-8(逗号分隔)(*.csv)格式的文件,那么导入时就需 要加encoding参数
#如果是CSV(逗号分隔) (*.csv)格式的文件,那么在导入的时候就需 要把编码格式更改为gbk,如果使用UTF-8就会报错
#如果文件名含中文,需要通过engine进行消除错误
#parse_dates参数表示将数据解析为时间格式
pd.read_table('file_path',sep='')
import pandas as pd
import pymysql
conn = pymysql.connect(
host='localhost',
user='root',
passwd='123456', #账户密码
db='py-sql', #库的名称
charset='utf8')
df = pd.read_sql('select * from ch4ex9',conn)
df
drop_duplicates(subset=‘列名',keep='last')
#默认保留第一个(行)值,根据subset这一列进行删除,
#也可以多列['列名','列名'],通过传入参数keep进行设置,
#参数 keep默认值是first,即保留第一个值;也可以是last,
#保留最后一个值; 还可以是False,即把重复值全部删除
df.columns=['col1','col2','col3'] #列索引
df.index=[1,2,3,4] #行索引
df.rename(columns={'订单编号':'新订单编号',.....}) #列索引更改
df.rename(index={'1':'一',.....}) #列索引更改
df[df['name']<20&df['name2']>50]
sort_values(by='col_name',ascending=True/False)
sort_values(by='col_name',ascending=True/False,na_position='first'/last)
#将缺失值显示在第一位或最后一位
#在第三列插入列名为name的一列
df.insert(2,'name',[data1,data2...])
转置
excel:复制–右键—选择性粘贴—行列转换
python:df.T
宽表转长表
melt中的id_vars参数用于指明宽表转换到长表时保持不变的列, var_name参数表示原来的列索引转化为“行索引”以后对应的列名, value_name表示新索引对应的值的列名。 注意,这里的“行索引”是有双引号的,它并非实际行索引,只是类 似实际的行索引。
apply与applymap的区别
函数apply()和applymap()都需要与匿名函 数lambda结合使用
map()函数是对一个序列中的所有元素执行相同的函数操作
apply()函数主要用于对DataFrame中的某一column或row中的元素执 行相同的函数操作
applymap()函数用于对DataFrame中的每一个元素执行相同的函数操作
返回周几 :datatime.now.weekeday()+1,+1是因为python是从0开始计数
返回周数:isocalendar()
日期格式:助strftime()函数可以自定义时间和日期的格式
df[df['成交时间']>datetime(2018,9,9)]
df1
名次 姓名 学号 成绩
0 1 小张 100 650
1 2 小王 101 600
2 3 小李 102 578
3 4 小赵 103 550
df2
Out[6]:
学号 班级
0 100 一班
1 101 一班
2 102 二班
3 103 三班
pd.merge(df1,df2)
Out[7]:
名次 姓名 学号 成绩 班级
0 1 小张 100 650 一班
1 2 小王 101 600 一班
2 3 小李 102 578 二班
3 4 小赵 103 550 三班
当两个表中没有公共列时,这里指的是实际值一样,但列名不同, 否则就无法连接了。这个时候要分别指定左表和右表的连接键,使用的 参数分别是left_on和rigth_on, left_on用来指明左表用作连接键的列名, right_on用来指明右表用作连接键的列名。
left_index 和 right_index,left_index 用来控制左表的索引,right_index用来控制右表的索引,还可以把索引列和普通列混用
how=‘’,left、right、inner、outer
重复的列名,只需要修改参数 suffixes的值 即可,默认为["_x","_y"]
pd.to_excel(excel_writer='file_path', #路径和文件名
sheet_name='', #表名称
index=True/False, #显示索引列
columns=['col_name1','col_name2'...],#选择要导出的列
encoding='utf-8', #编码
na_rep=0, #缺失值填充为0
inf_rep=0) #无穷值填充为0
pd.to_csv(path_or_buf='file_path', #路径和文件名
sheet_name='', #表名称
index=True/False, #显示索引列
columns=['col_name1','col_name2'...],#选择要导出的列
encoding='utf-8-sig', #编码
na_rep=0, #缺失值填充为0
sep=',') #分隔符
%config InlineBackend.figure_format='svg'
fig=plt.figure(figsize=(10,8)) #设置画布
p1=fig.add_subplot(3,4,1) #设置三行四列的坐标轴(要在画布的基础上)
plt.subplot2gri((2,2),(0,0)) #建立坐标系时不需要先建立画布,表示两行两列,并在(0,0)的位置进行画图
plt.subplt(3,4,1) #设置三行四列的坐标轴(无需在画布的基础上)
plt.subplts(2,2)
plt.subplots函数也是plt库的一个函数,它与subplot2grid函数和 subplot函数的不同之处是subplot2grid函数和subplot函数每次只返回一个坐标系,而subplots函数一次可以返回多个坐标系。
上面代码表示将图表的整个区域分成2行2列,并将4个坐标系全部返回
plt.xlabel('x轴名称',labelpad=10) #给参数labelpad传入 具体的距离数
plt.xticks(['1月份','2月份','3月份',....])
#有的时候为了数据安全不会把 x/y 轴的数值具体显示出来,
#这个时候只需要给xticks、yticks传入一个空列表就可以把x/y轴的数值隐藏起来
除了xticks、yticks方法,还可以使用plt库中tick_params函数对轴刻 度线进行设置
plt.xlim(0,10)
plt.ylim(0,8000)
plt.axis('off')
plt.grid(b=True,axis='x') #只打开x轴的网格线
#还可以linestyle、linewidth
plt.legend(loc=)
plt.title(s='name',loc=)
plt.text(x,y,str,ha,va,fontsize)
plt.text函数只是针对坐标轴中的具体某一点(x,y)显示数值str,要想 对整个图表显示数据标签,需要利用for进行遍历
plt.annotate(s,xy=,xytext,arrowprops=())
plt.savefig('file_path')