沧州三亚菏泽经济预测自然
投稿投诉
自然科学
知识物理
化学生物
地理解释
预测理解
本质社会
人类现象
行为研究
经济政治
心理结构
关系指导
人文遗产
菏泽德阳
山西湖州
宝鸡上海
茂名内江
三亚信阳
长春北海
西安安徽
黄石烟台
沧州湛江
肇庆鹤壁
六安韶关
成都钦州

Python数据清洗与整理

9月21日 桃花醉投稿
  处理缺失值
  In〔87〕:frompandasimportSeries,DataFrameimportpandasaspdimportnumpyasnpimportmatplotlib。pyplotaspltimportmatplotlibasmplimportseabornassns
  In〔88〕:matplotlibinline
  In〔3〕:df1DataFrame(〔〔3,5,3〕,〔1,6,np。nan〕,〔lili,np。nan,pop〕,〔np。nan,a,b〕〕)创建有缺失值的DataFramedf1
  Out〔3〕:
  0hr1hr2hr0hr3hr5hr3hr1hr1hr6hrNaN
  2hrlili
  NaN
  pop
  3hrNaN
  a
  b查找缺失值df。isnull()、df。notnull()、df。info()
  In〔4〕:df1。isnull()True的为缺失值
  Out〔4〕:
  0hr1hr2hr0hrFalse
  False
  False
  1hrFalse
  False
  True
  2hrFalse
  True
  False
  3hrTrue
  False
  False
  In〔5〕:df1。notnull()False为缺失值
  Out〔5〕:
  0hr1hr2hr0hrTrue
  True
  True
  1hrTrue
  True
  False
  2hrTrue
  False
  True
  3hrFalse
  True
  True
  In〔6〕:df1。isnull()。sum()获取每列的缺失值数量,再通过求和就可以获取整个DataFrame的缺失值数量
  Out〔6〕:011121dtype:int64
  In〔7〕:df1。isnull()。sum()。sum()
  Out〔7〕:3
  In〔9〕:df1。isnull()。values。any()
  Out〔9〕:True
  In〔10〕:df1。info()通过info方法,也可以看出DataFrame每列数据的缺失值情况classpandas。core。frame。DataFrameRangeIndex:4entries,0to3Datacolumns(total3columns):03nonnullobject13nonnullobject23nonnullobjectdtypes:object(3)memoryusage:176。0bytes删除缺失值df。dropna()、df。dropna(howall)
  In〔11〕:df1。dropna()dropna方法可以删除具有缺失值的行,整行删除,传入howall,则只会删除全为NaN的那些行
  Out〔11〕:
  0hr1hr2hr0hr3hr5hr3hrIn〔17〕:df2DataFrame(np。arange(12)。reshape(3,4))df2
  Out〔17〕:
  0hr1hr2hr3hr0hr0hr1hr2hr3hr1hr4hr5hr6hr7hr2hr8hr9hr10hr11hrIn〔19〕:df2。ix〔2,:〕np。nan索引为2,即第三行所有列为缺失值df2〔3〕np。nan新建列索引为3的所有数据为缺失值df2
  Out〔19〕:
  0hr1hr2hr3hr0hr0。0
  1。0
  2。0
  NaN
  1hr4。0
  5。0
  6。0
  NaN
  2hrNaN
  NaN
  NaN
  NaN
  In〔20〕:df2。dropna(howall)传入howall,则只会删除全为NaN的那些行
  Out〔20〕:
  0hr1hr2hr3hr0hr0。0
  1。0
  2。0
  NaN
  1hr4。0
  5。0
  6。0
  NaN
  In〔21〕:df2。dropna(howall,axis1)axis1,轴向为列,删除整列为缺失值的,默认为行删除
  Out〔21〕:
  0hr1hr2hr0hr0。0
  1。0
  2。0
  1hr4。0
  5。0
  6。0
  2hrNaN
  NaN
  NaN填充缺失值df。fillna(0)
  In〔22〕:df2
  Out〔22〕:
  0hr1hr2hr3hr0hr0。0
  1。0
  2。0
  NaN
  1hr4。0
  5。0
  6。0
  NaN
  2hrNaN
  NaN
  NaN
  NaN
  In〔24〕:df2。fillna(0)通过fillna方法可以将缺失值替换为常数值
  Out〔24〕:
  0hr1hr2hr3hr0hr0。0
  1。0
  2。0
  0。0
  1hr4。0
  5。0
  6。0
  0。0
  2hr0。0
  0。0
  0。0
  0。0
  In〔25〕:df2。fillna({1:6,3:0})针对列索引1和列索引3的缺失值进行相应的填充在fillna中传入字典结构数据,可以针对不同列填充不同的值,fillna返回的是新对象,不会对原数据进行修改
  Out〔25〕:
  0hr1hr2hr3hr0hr0。0
  1。0
  2。0
  0。0
  1hr4。0
  5。0
  6。0
  0。0
  2hrNaN
  6。0
  NaN
  0。0
  In〔26〕:df2
  Out〔26〕:
  0hr1hr2hr3hr0hr0。0
  1。0
  2。0
  NaN
  1hr4。0
  5。0
  6。0
  NaN
  2hrNaN
  NaN
  NaN
  NaN
  In〔27〕:df2。fillna({1:6,3:0},inplaceTrue)通过inplace就地进行修改1。df。fillna()函数的功能:该函数的功能是用指定的值去填充dataframe中的缺失值。2。df。fillna()函数的基本语法:df。fillna(a,〔inplaceFalse〕),其中参数a表示的是常数或字典,若a为常数,则用常数a填充缺失值,若a为字典,则表示第key列的缺失值用key对应的value值填充,如:df。fillna({0:10,1:20}),表示用10去填充第0列的缺失值,用20去填充第1列的缺失值;inplace为可选参数,默认为False,表示不修改原对象,若指定inplaceTrue,则直接修改原对象。3。df。fillna()函数的返回值:若指定inplaceTrue,则函数返回值为None,若未指定,则函数返回填充缺失值后的数据。4。df。fillna()函数的用法补充:4。1指定method参数:(1)methodffill或pad,表示用前一个非缺失值去填充该缺失值,语法为df。fillna(methodffill);(2)methodbflii或backfill,表示用下一个非缺失值填充该缺失值,语法为df。fillna(methodbflii);4。2指定limit参数和axis参数:limit参数用于指定每列或每行缺失值填充的数量,默认按列操作,axis参数用于指定对行还是对列操作。若axis0,则对各行数据进行填充,若axis1,则对各列数据进行填充,如:df。fillna(methodffill,limit1,axis1)表示用上一个非缺失值填充该缺失值,且每行中只有一列被填充,因为methodffill并且limit1,所以每行中只有最先出现缺失值的一列被填充df2
  Out〔27〕:
  0hr1hr2hr3hr0hr0。0
  1。0
  2。0
  0。0
  1hr4。0
  5。0
  6。0
  0。0
  2hrNaN
  6。0
  NaN
  0。0
  In〔28〕:df2。fillna(methodffill)methodffill或pad,表示用前一个非缺失值去填充该缺失值
  Out〔28〕:
  0hr1hr2hr3hr0hr0。0
  1。0
  2。0
  0。0
  1hr4。0
  5。0
  6。0
  0。0
  2hr4。0
  6。0
  6。0
  0。0
  In〔29〕:df2
  Out〔29〕:
  0hr1hr2hr3hr0hr0。0
  1。0
  2。0
  0。0
  1hr4。0
  5。0
  6。0
  0。0
  2hrNaN
  6。0
  NaN
  0。0
  In〔31〕:df2〔0〕df2〔0〕。fillna(df2〔0〕。mean())指定第0列缺失值通过平均值作为填充数df2
  Out〔31〕:
  0hr1hr2hr3hr0hr0。0
  1。0
  2。0
  0。0
  1hr4。0
  5。0
  6。0
  0。0
  2hr2。0
  6。0
  NaN
  0。0
  In〔32〕:df2。fillna?fillna的参数,可以通过?进行帮助查询,这也是自我学习最好的方法移除重复数据
  In〔33〕:data{name:〔张三,李四,张三,小明〕,sex:〔female,male,female,male〕,year:〔2001,2002,2001,2002〕,city:〔北京,上海,北京,北京〕}df1DataFrame(data)df1
  Out〔33〕:
  city
  name
  sex
  year
  0hr北京
  张三
  female
  2001hr1hr上海
  李四
  male
  2002hr2hr北京
  张三
  female
  2001hr3hr北京
  小明
  male
  2002hrIn〔34〕:df1。duplicated()判断各行是否有重复数据,当每行的每个字段都相同时才会判断为重复项
  Out〔34〕:0False1False2True3Falsedtype:bool
  In〔35〕:df1。dropduplicates()删除多余的重复项,当每行的每个字段都相同时才会判断为重复项
  Out〔35〕:
  city
  name
  sex
  year
  0hr北京
  张三
  female
  2001hr1hr上海
  李四
  male
  2002hr3hr北京
  小明
  male
  2002hrIn〔36〕:df1。dropduplicates(〔sex,year〕)指定部分列作为判断重复项的依据,默认保留的数据为第一个出现的组合
  Out〔36〕:
  city
  name
  sex
  year
  0hr北京
  张三
  female
  2001hr1hr上海
  李四
  male
  2002hrIn〔39〕:df1。dropduplicates(〔sex,year〕,keeplast)传入keeplast’可以保留最后一个出现的组合
  Out〔39〕:
  city
  name
  sex
  year
  2hr北京
  张三
  female
  2001hr3hr北京
  小明
  male
  2002替换值
  In〔41〕:data{name:〔张三,李四,王五,小明〕,sex:〔female,male,,male〕,year:〔2001,2003,2001,2002〕,city:〔北京,上海,,北京〕}df1DataFrame(data)df1
  Out〔41〕:
  city
  name
  sex
  year
  0hr北京
  张三
  female
  2001hr1hr上海
  李四
  male
  2003hr2hr王五
  2001hr3hr北京
  小明
  male
  2002hrIn〔42〕:df1。replace(,不详)通过replace可完成替换值的功能,空值替换为不详
  Out〔42〕:
  city
  name
  sex
  year
  0hr北京
  张三
  female
  2001hr1hr上海
  李四
  male
  2003hr2hr不详
  王五
  不详
  2001hr3hr北京
  小明
  male
  2002hrIn〔43〕:df1。replace(〔,2001〕,〔不详,2002〕)列表格式多值替换,空值替换为不详,2001替换为2002
  Out〔43〕:
  city
  name
  sex
  year
  0hr北京
  张三
  female
  2002hr1hr上海
  李四
  male
  2003hr2hr不详
  王五
  不详
  2002hr3hr北京
  小明
  male
  2002hrIn〔44〕:df1。replace({:不详,2001:2002})字典格式多值替换,空值替换为不详,2001替换为2002
  Out〔44〕:
  city
  name
  sex
  year
  0hr北京
  张三
  female
  2002hr1hr上海
  李四
  male
  2003hr2hr不详
  王五
  不详
  2002hr3hr北京
  小明
  male
  2002利用函数或映射进行数据转换
  In〔45〕:data{name:〔张三,李四,王五,小明〕,math:〔79,52,63,92〕}df2DataFrame(data)df2
  Out〔45〕:
  math
  name
  0hr79hr张三
  1hr52hr李四
  2hr63hr王五
  3hr92hr小明
  In〔46〕:deff(x):定义函数fifx90:return优秀elif70x90:return良好elif60x70:return合格else:return不合格
  map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每一个元素,并把结果作为新的Iterable返回。其语法格式为:map(function,iterable。。。)function函数名iterable一个或多个序列
  In〔48〕:df2〔class〕df2〔math〕。map(f)新增class列,math列每个元素都运行函数f后填入class列df2
  Out〔48〕:
  math
  name
  class
  0hr79hr张三
  良好
  1hr52hr李四
  不合格
  2hr63hr王五
  合格
  3hr92hr小明
  优秀
  In〔49〕:deldf2〔class〕删除class列df2
  Out〔49〕:
  math
  name
  0hr79hr张三
  1hr52hr李四
  2hr63hr王五
  3hr92hr小明
  In〔50〕:df2〔class〕df2〔math〕。apply(f)apply函数运行f函数df2
  Out〔50〕:
  math
  name
  class
  0hr79hr张三
  良好
  1hr52hr李四
  不合格
  2hr63hr王五
  合格
  3hr92hr小明
  优秀检测异常值
  In〔2〕:df3DataFrame(np。arange(10),columns〔X〕)df3〔Y〕2df3〔X〕0。5df3。iloc〔9,1〕185df3
  Out〔2〕:
  X
  Y
  0hr0hr0。5
  1hr1hr2。5
  2hr2hr4。5
  3hr3hr6。5
  4hr4hr8。5
  5hr5hr10。5
  6hr6hr12。5
  7hr7hr14。5
  8hr8hr16。5
  9hr9hr185。0
  In〔8〕:df3。plot(kindscatter,xX,yY)
  Out〔8〕:matplotlib。axes。subplots。AxesSubplotat0xa1dcef0
  虚拟变量
  在数学建模和机器学习中,只有数值型数据才能供算法使用,对于一些分类变量则需要将其转换为虚拟变量(哑变量)(也就是0,1矩阵),通过getdumnies函数即可实现该功能
  In〔10〕:dfDataFrame({朝向:〔东,南,东,西,北〕,价格:〔1200,2100,2300,2900,1400〕})df
  Out〔10〕:
  价格
  朝向
  0hr1200hr东
  1hr2100hr南
  2hr2300hr东
  3hr2900hr西
  4hr1400hr北
  In〔11〕:pd。getdummies(df〔朝向〕)朝向列转换为虚拟变量(哑变量)(也就是0,1矩阵)
  Out〔11〕:
  东
  北
  南
  西
  0hr1hr0hr0hr0hr1hr0hr0hr1hr0hr2hr1hr0hr0hr0hr3hr0hr0hr0hr1hr4hr0hr1hr0hr0hrIn〔12〕:df2DataFrame({朝向:〔东北,西南,东,西北,北〕,价格:〔1200,2100,2300,2900,1400〕})df2
  Out〔12〕:
  价格
  朝向
  0hr1200hr东北
  1hr2100hr西南
  2hr2300hr东
  3hr2900hr西北
  4hr1400hr北
  In〔16〕:dummiesdf2〔朝向〕。apply(lambdax:Series(x。split())。valuecounts())对于多类别的数据而言,需要通过apply函数来实现dummies
  Out〔16〕:
  东
  北
  南
  西
  0hr1。0
  1。0
  NaN
  NaN
  1hrNaN
  NaN
  1。0
  1。0
  2hr1。0
  NaN
  NaN
  NaN
  3hrNaN
  1。0
  NaN
  1。0
  4hrNaN
  1。0
  NaN
  NaN
  In〔19〕:dummiesdummies。fillna(0)。astype(int)dummies
  Out〔19〕:
  东
  北
  南
  西
  0hr1hr1hr0hr0hr1hr0hr0hr1hr1hr2hr1hr0hr0hr0hr3hr0hr1hr0hr1hr4hr0hr1hr0hr0数据合并与重塑
  In〔43〕:priceDataFrame({fruit:〔apple,banana,orange〕,price:〔23,32,45〕})amountDataFrame({fruit:〔apple,banana,apple,apple,banana,pear〕,amount:〔5,3,6,3,5,7〕})
  In〔44〕:price
  Out〔44〕:
  fruit
  price
  0hrapple
  23hr1hrbanana
  32hr2hrorange
  45hrIn〔45〕:amount
  Out〔45〕:
  amount
  fruit
  0hr5hrapple
  1hr3hrbanana
  2hr6hrapple
  3hr3hrapple
  4hr5hrbanana
  5hr7hrpearmerge合并
  In〔46〕:pd。merge(amount,price)merge函数是通过一个或多个键(DataFrame的列)将两个DataFrame按行合并起来
  Out〔46〕:
  amount
  fruit
  price
  0hr5hrapple
  23hr1hr6hrapple
  23hr2hr3hrapple
  23hr3hr3hrbanana
  32hr4hr5hrbanana
  32hrIn〔47〕:pd。merge(amount,price,onfruit)指定键名合并
  Out〔47〕:
  amount
  fruit
  price
  0hr5hrapple
  23hr1hr6hrapple
  23hr2hr3hrapple
  23hr3hr3hrbanana
  32hr4hr5hrbanana
  32hrmerge函数常用参数
  In〔48〕:pd。merge(amount,price,leftonfruit,rightonfruit)merge默认为内连接(inner),也就是返回交集。通过how参数可以选择连接方法:左连接(left)、右连接(right)和外连接(outer)
  Out〔48〕:
  amount
  fruit
  price
  0hr5hrapple
  23hr1hr6hrapple
  23hr2hr3hrapple
  23hr3hr3hrbanana
  32hr4hr5hrbanana
  32hrIn〔49〕:pd。merge(amount,price,howleft)
  Out〔49〕:
  amount
  fruit
  price
  0hr5hrapple
  23。0
  1hr3hrbanana
  32。0
  2hr6hrapple
  23。0
  3hr3hrapple
  23。0
  4hr5hrbanana
  32。0
  5hr7hrpear
  NaN
  In〔50〕:pd。merge(amount,price,howright)
  Out〔50〕:
  amount
  fruit
  price
  0hr5。0
  apple
  23hr1hr6。0
  apple
  23hr2hr3。0
  apple
  23hr3hr3。0
  banana
  32hr4hr5。0
  banana
  32hr5hrNaN
  orange
  45hrIn〔52〕:pd。merge(amount,price,howouter)
  Out〔52〕:
  amount
  fruit
  price
  0hr5。0
  apple
  23。0
  1hr6。0
  apple
  23。0
  2hr3。0
  apple
  23。0
  3hr3。0
  banana
  32。0
  4hr5。0
  banana
  32。0
  5hr7。0
  pear
  NaN
  6hrNaN
  orange
  45。0
  In〔53〕:price2DataFrame({fruit:〔apple,banana,orange,apple〕,price:〔23,32,45,25〕})amount2DataFrame({fruit:〔apple,banana,apple,apple,banana,pear〕,amount:〔5,3,6,3,5,7〕})
  In〔54〕:amount2
  Out〔54〕:
  amount
  fruit
  0hr5hrapple
  1hr3hrbanana
  2hr6hrapple
  3hr3hrapple
  4hr5hrbanana
  5hr7hrpear
  In〔55〕:price2
  Out〔55〕:
  fruit
  price
  0hrapple
  23hr1hrbanana
  32hr2hrorange
  45hr3hrapple
  25hrIn〔57〕:pd。merge(amount2,price2)
  Out〔57〕:
  amount
  fruit
  price
  0hr5hrapple
  23hr1hr5hrapple
  25hr2hr6hrapple
  23hr3hr6hrapple
  25hr4hr3hrapple
  23hr5hr3hrapple
  25hr6hr3hrbanana
  32hr7hr5hrbanana
  32hrIn〔59〕:leftDataFrame({key1:〔one,one,two〕,key2:〔a,b,a〕,val1:〔2,3,4〕})rightDataFrame({key1:〔one,one,two,two〕,key2:〔a,a,a,b〕,val2:〔5,6,7,8〕})
  In〔60〕:left
  Out〔60〕:
  key1
  key2
  val1
  0hrone
  a
  2hr1hrone
  b
  3hr2hrtwo
  a
  4hrIn〔61〕:right
  Out〔61〕:
  key1
  key2
  val2
  0hrone
  a
  5hr1hrone
  a
  6hr2hrtwo
  a
  7hr3hrtwo
  b
  8hrIn〔62〕:pd。merge(left,right,on〔key1,key2〕,howouter)多键进行合并,即传入一个list即可
  Out〔62〕:
  key1
  key2
  val1
  val2
  0hrone
  a
  2。0
  5。0
  1hrone
  a
  2。0
  6。0
  2hrone
  b
  3。0
  NaN
  3hrtwo
  a
  4。0
  7。0
  4hrtwo
  b
  NaN
  8。0
  In〔63〕:pd。merge(left,right,onkey1)
  Out〔63〕:
  key1
  key2x
  val1
  key2y
  val2
  0hrone
  a
  2hra
  5hr1hrone
  a
  2hra
  6hr2hrone
  b
  3hra
  5hr3hrone
  b
  3hra
  6hr4hrtwo
  a
  4hra
  7hr5hrtwo
  a
  4hrb
  8hrIn〔64〕:pd。merge(left,right,onkey1,suffixes(left,right))重复列名的修改,suffixes方法
  Out〔64〕:
  key1
  key2left
  val1
  key2right
  val2
  0hrone
  a
  2hra
  5hr1hrone
  a
  2hra
  6hr2hrone
  b
  3hra
  5hr3hrone
  b
  3hra
  6hr4hrtwo
  a
  4hra
  7hr5hrtwo
  a
  4hrb
  8hrIn〔66〕:left2DataFrame({key:〔a,a,b,b,c〕,val1:range(5)})right2DataFrame({val2:〔5,7〕},index〔a,b〕)
  In〔67〕:left2
  Out〔67〕:
  key
  val1
  0hra
  0hr1hra
  1hr2hrb
  2hr3hrb
  3hr4hrc
  4hrIn〔68〕:right2
  Out〔68〕:
  val2
  a
  5hrb
  7hrIn〔70〕:pd。merge(left2,right2,leftonkey,rightindexTrue)连接的键位于DataFrame的行索引上,可通过传入leftindexTrue或者rightindexTrue指定将索引作为连接键来使用
  Out〔70〕:
  key
  val1
  val2
  0hra
  0hr5hr1hra
  1hr5hr2hrb
  2hr7hr3hrb
  3hr7hrIn〔71〕:left3DataFrame({val1:range(4)},index〔a,b,a,c〕)right3DataFrame({val2:〔5,7〕},index〔a,b〕)
  In〔72〕:left3
  Out〔72〕:
  val1
  a
  0hrb
  1hra
  2hrc
  3hrIn〔73〕:right3
  Out〔73〕:
  val2
  a
  5hrb
  7hrIn〔74〕:left3。join(right3,howouter)join方法,可以快速完成按索引合并
  Out〔74〕:
  val1
  val2
  a
  0hr5。0
  a
  2hr5。0
  b
  1hr7。0
  c
  3hrNaNconcat连接
  In〔3〕:s1Series(〔0,1〕,index〔a,b〕)s2Series(〔2,3〕,index〔c,d〕)s3Series(〔4,5〕,index〔e,f〕)
  In〔4〕:pd。concat(〔s1,s2,s3〕)需要合并的DataFrame之间没有连接键,通过pandas的concat方法实现
  Out〔4〕:a0b1c2d3e4f5dtype:int64
  In〔5〕:pd。concat(〔s1,s2,s3〕,axis1)默认情况下,concat是在axis0上工作的,通过指定轴向也可以按列进行连接
  Out〔5〕:
  0hr1hr2hra
  0。0
  NaN
  NaN
  b
  1。0
  NaN
  NaN
  c
  NaN
  2。0
  NaN
  d
  NaN
  3。0
  NaN
  e
  NaN
  NaN
  4。0
  f
  NaN
  NaN
  5。0
  In〔6〕:s4pd。concat(〔s110,s3〕)s4
  Out〔6〕:a0b10e4f5dtype:int64
  In〔8〕:pd。concat(〔s1,s4〕,axis1)
  Out〔8〕:
  0hr1hra
  0。0
  0hrb
  1。0
  10hre
  NaN
  4hrf
  NaN
  5hrIn〔9〕:pd。concat(〔s1,s4〕,axis1,joininner)concat默认为外连接(并集),传入joininner’可以实现内连接
  Out〔9〕:
  0hr1hra
  0hr0hrb
  1hr10hrIn〔14〕:pd。concat(〔s1,s4〕,axis1,joininner,joinaxes〔〔b,a〕〕)通过joinaxes指定使用的索引顺序
  Out〔14〕:
  0hr1hrb
  1hr10hra
  0hr0hrIn〔15〕:pd。concat(〔s1,s4〕)concat只有内连接和外连接
  Out〔15〕:a0b1a0b10e4f5dtype:int64
  In〔17〕:pd。concat(〔s1,s4〕,keys〔one,two〕)通过keys参数给连接对象创建一个层次化索引
  Out〔17〕:onea0b1twoa0b10e4f5dtype:int64
  In〔18〕:pd。concat(〔s1,s4〕,axis1,keys〔one,two〕)如果按列连接,keys就成了DataFrame的列索引
  Out〔18〕:
  one
  two
  a
  0。0
  0hrb
  1。0
  10hre
  NaN
  4hrf
  NaN
  5hrIn〔28〕:df1DataFrame({val1:range(3)},index〔a,b,c〕)df2DataFrame({val2:〔5,7〕},index〔a,b〕)
  In〔29〕:df1
  Out〔29〕:
  val1
  a
  0hrb
  1hrc
  2hrIn〔30〕:df2
  Out〔30〕:
  val2
  a
  5hrb
  7hrIn〔32〕:pd。concat(〔df1,df2〕,axis1,keys〔one,two〕)
  Out〔32〕:
  one
  two
  val1
  val2
  a
  0hr5。0
  b
  1hr7。0
  c
  2hrNaN
  In〔33〕:pd。concat({one:df1,two:df2},axis1)通过字典数据也可以完成连接,字典的键就是keys的值
  Out〔33〕:
  one
  two
  val1
  val2
  a
  0hr5。0
  b
  1hr7。0
  c
  2hrNaN
  In〔34〕:df1DataFrame(np。random。randn(3,4),columns〔a,b,c,d〕)df2DataFrame(np。random。randn(2,2),columns〔d,c〕)
  In〔35〕:df1
  Out〔35〕:
  a
  b
  c
  d
  0hr0。023541
  0。694903
  0。515242
  0。460737
  1hr1。326048
  0。259269
  0。685732
  0。052237
  2hr0。110079
  2。729854
  0。503138
  1。721161
  In〔36〕:df2
  Out〔36〕:
  d
  c
  0hr0。995995
  0。342845
  1hr0。848536
  1。027354
  In〔37〕:pd。concat(〔df1,df2〕)
  Out〔37〕:
  a
  b
  c
  d
  0hr0。023541
  0。694903
  0。515242
  0。460737
  1hr1。326048
  0。259269
  0。685732
  0。052237
  2hr0。110079
  2。729854
  0。503138
  1。721161
  0hrNaN
  NaN
  0。342845
  0。995995
  1hrNaN
  NaN
  1。027354
  0。848536
  In〔38〕:pd。concat(〔df1,df2〕,ignoreindexTrue)通过ignoreindex‘True’忽略索引,以达到重排索引的效果
  Out〔38〕:
  a
  b
  c
  d
  0hr0。023541
  0。694903
  0。515242
  0。460737
  1hr1。326048
  0。259269
  0。685732
  0。052237
  2hr0。110079
  2。729854
  0。503138
  1。721161
  3hrNaN
  NaN
  0。342845
  0。995995
  4hrNaN
  NaN
  1。027354
  0。848536combinefirst合并
  In〔39〕:df1DataFrame({a:〔3,np。nan,6,np。nan〕,b:〔np。nan,4,6,np。nan〕})df2DataFrame({a:range(5),b:range(5)})
  In〔40〕:df1
  Out〔40〕:
  a
  b
  0hr3。0
  NaN
  1hrNaN
  4。0
  2hr6。0
  6。0
  3hrNaN
  NaN
  In〔41〕:df2
  Out〔41〕:
  a
  b
  0hr0hr0hr1hr1hr1hr2hr2hr2hr3hr3hr3hr4hr4hr4hrIn〔42〕:df1。combinefirst(df2)需要合并的两个DataFrame存在重复的索引,使用combinefirst方法
  Out〔42〕:
  a
  b
  0hr3。0
  0。0
  1hr1。0
  4。0
  2hr6。0
  6。0
  3hr3。0
  3。0
  4hr4。0
  4。0数据重塑
  In〔48〕:dfDataFrame(np。arange(9)。reshape(3,3),index〔a,b,c〕,columns〔one,two,three〕)df。index。namealphdf。columns。namenumberdf
  Out〔48〕:
  number
  one
  two
  three
  alph
  a
  0hr1hr2hrb
  3hr4hr5hrc
  6hr7hr8hrIn〔50〕:resultdf。stack()stack方法用于将DataFrame的列旋转为行;默认情况下,数据重塑的操作都是最内层的result
  Out〔50〕:alphnumberaone0two1three2bone3two4three5cone6two7three8dtype:int32
  In〔51〕:result。unstack()unstack方法用于将DataFrame的行旋转为列,默认情况下,数据重塑的操作都是最内层的
  Out〔51〕:
  number
  one
  two
  three
  alph
  a
  0hr1hr2hrb
  3hr4hr5hrc
  6hr7hr8hrIn〔52〕:result。unstack(0)
  Out〔52〕:
  alph
  a
  b
  c
  number
  one
  0hr3hr6hrtwo
  1hr4hr7hrthree
  2hr5hr8hrIn〔53〕:result。unstack(alph)
  Out〔53〕:
  alph
  a
  b
  c
  number
  one
  0hr3hr6hrtwo
  1hr4hr7hrthree
  2hr5hr8hrIn〔54〕:dfDataFrame(np。arange(16)。reshape(4,4),index〔〔one,one,two,two〕,〔a,b,a,b〕〕,columns〔〔apple,apple,orange,orange〕,〔red,green,red,green〕〕)df
  Out〔54〕:
  apple
  orange
  red
  green
  red
  green
  one
  a
  0hr1hr2hr3hrb
  4hr5hr6hr7hrtwo
  a
  8hr9hr10hr11hrb
  12hr13hr14hr15hrIn〔55〕:df。stack()
  Out〔55〕:
  apple
  orange
  one
  a
  green
  1hr3hrred
  0hr2hrb
  green
  5hr7hrred
  4hr6hrtwo
  a
  green
  9hr11hrred
  8hr10hrb
  green
  13hr15hrred
  12hr14hrIn〔56〕:df。unstack()
  Out〔56〕:
  apple
  orange
  red
  green
  red
  green
  a
  b
  a
  b
  a
  b
  a
  b
  one
  0hr4hr1hr5hr2hr6hr3hr7hrtwo
  8hr12hr9hr13hr10hr14hr11hr15字符串处理
  In〔71〕:data{data:〔张三男,李四女,王五女,小明男〕,}dfDataFrame(data)df
  Out〔71〕:
  data
  0hr张三男
  1hr李四女
  2hr王五女
  3hr小明男
  In〔67〕:resultdf〔data〕。apply(lambdax:Series(x。split()))把数据分成两列,常用的方法是通过函数应用来完成result
  Out〔67〕:
  0hr1hr0hr张三
  男
  1hr李四
  女
  2hr王五
  女
  3hr小明
  男
  In〔81〕:newdfdf〔data〕。str。split()pandas中字段的str属性可以轻松调用字符串的方法newdf
  Out〔81〕:0〔张三,男〕1〔李四,女〕2〔王五,女〕3〔小明,男〕Name:data,dtype:object
  In〔82〕:df〔name〕newdf。str〔0〕pandas中字段的str属性可以轻松调用字符串的方法df〔sex〕newdf。str〔1〕pandas中字段的str属性可以轻松调用字符串的方法df
  Out〔82〕:
  data
  name
  sex
  0hr张三男
  张三
  男
  1hr李四女
  李四
  女
  2hr王五女
  王五
  女
  3hr小明男
  小明
  男正则表达式
  In〔83〕:df2DataFrame({email:〔102345qq。com,342167qq。com,65132qq。com〕})df2
  Out〔83〕:
  email
  0hr102345qq。com
  1hr342167qq。com
  2hr65132qq。com
  In〔84〕:df2〔email〕。str。findall((。?))
  Out〔84〕:0〔102345〕1〔342167〕2〔65132〕Name:email,dtype:object
  In〔85〕:df2〔QQ〕df2〔email〕。str。findall((。?))。str。get(0)df2
  Out〔85〕:
  email
  QQ
  0hr102345qq。com
  102345hr1hr342167qq。com
  342167hr2hr65132qq。com
  65132综合示例Iris数据集
  In〔101〕:frompandasimportSeries,DataFrameimportpandasaspdimportnumpyasnpimportmatplotlib。pyplotasplt导入pyplot绘图模块importmatplotlibasmpl导入matplotlib绘图库importseabornassns导入seaborn绘图库matplotlibinline
  In〔107〕:irisdatapd。readcsv(open(H:python数据分析数据irisdata。csv))读取数据irisdata。head()
  Out〔107〕:
  sepallengthcm
  sepalwidthcm
  petallengthcm
  petalwidthcm
  class
  0hr5。1
  3。5
  1。4
  0。2
  Irissetosa
  1hr4。9
  3。0
  1。4
  0。2
  Irissetosa
  2hr4。7
  3。2
  1。3
  0。2
  Irissetosa
  3hr4。6
  3。1
  1。5
  0。2
  Irissetosa
  4hr5。0
  3。6
  1。4
  0。2
  Irissetosa首先对数据进行简单描述,看其中是否有异常值
  In〔108〕:irisdata。shape数据大小行数和列数
  Out〔108〕:(150,5)
  In〔110〕:irisdata。describe()
  Out〔110〕:
  sepallengthcm
  sepalwidthcm
  petallengthcm
  petalwidthcm
  count
  150。000000
  150。000000
  150。000000
  145。000000
  mean
  5。644627
  3。054667
  3。758667
  1。236552
  std
  1。312781
  0。433123
  1。764420
  0。755058
  min
  0。055000
  2。000000
  1。000000
  0。100000
  25
  5。100000
  2。800000
  1。600000
  0。400000
  50
  5。700000
  3。000000
  4。350000
  1。300000
  75
  6。400000
  3。300000
  5。100000
  1。800000
  max
  7。900000
  4。400000
  6。900000
  2。500000
  In〔112〕:irisdata〔class〕。unique()去重unique函数去除其中重复的元素,并按元素由大到小返回一个新的无元素重复的元组或者列表
  Out〔112〕:array(〔Irissetosa,Irissetossa,Irisversicolor,versicolor,Irisvirginica〕,dtypeobject)
  In〔115〕:irisdata。ix〔irisdata〔class〕versicolor,class〕Irisversicoloririsdata。ix〔irisdata〔class〕Irissetossa,class〕Irissetosairisdata〔class〕。unique()
  Out〔115〕:array(〔Irissetosa,Irisversicolor,Irisvirginica〕,dtypeobject)
  In〔118〕:sns。pairplot(irisdata,hueclass)利用seaborn绘制散点图矩阵F:Anacondaenvsdataanalysislibsitepackagesumpylibfunctionbase。py:748:RuntimeWarning:invalidvalueencounteredingreaterequalkeep(tmpamn)F:Anacondaenvsdataanalysislibsitepackagesumpylibfunctionbase。py:749:RuntimeWarning:invalidvalueencounteredinlessequalkeep(tmpamx)
  Out〔118〕:seaborn。axisgrid。PairGridat0x1025cac8
  In〔119〕:irisdata。ix〔irisdata〔class〕Irissetosa,sepalwidthcm〕。hist()
  Out〔119〕:matplotlib。axes。subplots。AxesSubplotat0x10bfd5c0
  In〔125〕:irisdatairisdata。loc〔(irisdata〔class〕!Irissetosa)(irisdata〔sepalwidthcm〕2。5)〕irisdata。loc〔irisdata〔class〕Irissetosa,sepalwidthcm〕。hist()
  Out〔125〕:matplotlib。axes。subplots。AxesSubplotat0x112ce240
  In〔126〕:irisdata。loc〔(irisdata〔class〕Irisversicolor)(irisdata〔sepallengthcm〕1。0)〕
  Out〔126〕:
  sepallengthcm
  sepalwidthcm
  petallengthcm
  petalwidthcm
  class
  77hr0。067
  3。0
  5。0
  1。7
  Irisversicolor
  78hr0。060
  2。9
  4。5
  1。5
  Irisversicolor
  79hr0。057
  2。6
  3。5
  1。0
  Irisversicolor
  80hr0。055
  2。4
  3。8
  1。1
  Irisversicolor
  81hr0。055
  2。4
  3。7
  1。0
  Irisversicolor
  In〔127〕:irisdata。loc〔(irisdata〔class〕Irisversicolor)(irisdata〔sepallengthcm〕1。0),sepallengthcm〕100。0
  In〔128〕:irisdata。isnull()。sum()
  Out〔128〕:sepallengthcm0sepalwidthcm0petallengthcm0petalwidthcm5class0dtype:int64
  In〔131〕:irisdata〔irisdata〔petalwidthcm〕。isnull()〕
  Out〔131〕:
  sepallengthcm
  sepalwidthcm
  petallengthcm
  petalwidthcm
  class
  7hr5。0
  3。4
  1。5
  NaN
  Irissetosa
  8hr4。4
  2。9
  1。4
  NaN
  Irissetosa
  9hr4。9
  3。1
  1。5
  NaN
  Irissetosa
  10hr5。4
  3。7
  1。5
  NaN
  Irissetosa
  11hr4。8
  3。4
  1。6
  NaN
  Irissetosa
  In〔132〕:irisdata。dropna(inplaceTrue)将缺失值进行删除处理
  In〔133〕:irisdata。tocsv(H:python数据分析数据iriscleandata。csv,indexFalse)最后对清洗好的数据进行存储
  In〔135〕:irisdatapd。readcsv(open(H:python数据分析数据iriscleandata。csv))irisdata。head()
  Out〔135〕:
  sepallengthcm
  sepalwidthcm
  petallengthcm
  petalwidthcm
  class
  0hr5。1
  3。5
  1。4
  0。2
  Irissetosa
  1hr4。9
  3。0
  1。4
  0。2
  Irissetosa
  2hr4。7
  3。2
  1。3
  0。2
  Irissetosa
  3hr4。6
  3。1
  1。5
  0。2
  Irissetosa
  4hr5。0
  3。6
  1。4
  0。2
  Irissetosa
  In〔136〕:irisdata。shape
  Out〔136〕:(144,5)数据探索
  In〔137〕:sns。pairplot(irisdata,hueclass)绘制散点矩阵图
  Out〔137〕:seaborn。axisgrid。PairGridat0x113f96d8
  In〔145〕:irisdata。boxplot(columnpetallengthcm,byclass,gridFalse,figsize(6,6))boxplot用于绘制箱形图,figsize可设置画布的大小F:Anacondaenvsdataanalysislibsitepackagesumpycorefromnumeric。py:57:FutureWarning:reshapeisdeprecatedandwillraiseinasubsequentrelease。Pleaseuse。values。reshape(。。。)insteadreturngetattr(obj,method)(args,kwds)
  Out〔145〕:matplotlib。axes。subplots。AxesSubplotat0x1359e668
  In〔139〕:irisdata。boxplot?箱型图查询帮助
投诉 评论

中超第14轮最佳阵容,韩佳奇两扑点球,韦世豪世界波双响2022中超联赛第12轮和第13轮的比赛受到疫情影响,多场比赛延期。第14轮终于顺利完赛,但赛程拖得比较长,9场比赛分别在8月18日到22日的5个比赛日里进行。外媒SOF……苦心创作30载,这款点触操作的剧情游戏还能玩出哪些花样?文丸子由罗恩吉尔伯创作,《猴岛的秘密》、《猴岛小英雄2:勒恰克的复仇》系列的最新续作《重返猴岛》于9月20日在Steam与Switch等游戏平台上线。游戏一登入便广受玩家……大胜公牛却暴露三大隐患,库里状态堪忧,勇士队仍不具备争冠实力在和芝加哥公牛队的比赛中,金州勇士队狂砍138分,最终以42分的优势大胜公牛队,如此巨大的分差也是勇士队今年为止取得的最大胜利,不过虽然打出了如此出色的表现,但是金州勇士队仍旧……游戏推荐虚拟角色跳舞模拟器DancingSim豪华版DancingSim是一款观赏虚拟角色跳舞的小工具,内置角色、服装、动画资源以及可调试的场景。支持创意工坊,可导入角色、动画、背景音乐。名称:DancingSim类……Python数据清洗与整理处理缺失值In〔87〕:frompandasimportSeries,DataFrameimportpandasaspdimportnumpyasnpimportmatp……华为Mate50Pro价格松动,256GB100倍变焦鸿蒙O喜欢华为的用户都知道,最近两三年,受老美打压的影响,华为的手机销量出现了断崖式的下跌,一方面是由于供应链限制,一方面则是因为技术封锁,导致华为无法在手机领域大展拳脚。如果没有老……妙手医生三战IPO,互联网医疗还能刮起新风吗?氪金大健康作者谢芸子编辑潘心怡封面来源视觉中国凭借线下的圆心药房和线上的妙手医生,圆心科技第三次站到IPO的跑道上。在早前的公开演讲中,圆心科技营销中心总经理张光……CBA三消息巩晓彬爱将退役,得分王被首钢拒绝,阿迪江专坑新疆作为山东男篮旗帜人物的巩晓彬,已经离开CBA赛场一个赛季了,随着巩晓彬的离开,当初曾经和巩晓彬一起打天下的球员几乎都遭到了清洗。李敬宇已经退役,王汝恒已经被迫离队,吴轲远走了山……中端机用户常常想红米K50用了不到一年,换小米13会不会浪费要不是预算有限,谁又愿意选择中端机,次旗舰作为主力机呢?相信这也是很多红米K50系列机主用户的独白。的确,天玑8100处理器作为2023年也完全够用,毕竟骁龙7Gen1迭代、天……培养孩子高情商的4个魔法句子养娃不易,关注我!!!06岁宝宝的喂养护理早教启蒙育儿知识这里都有第一句如果我是你,我会怎么做?这种话,其实我们在家里要首先形成使用习惯,比如,孩子对我们大吼大叫的……足球报一旦哈维尔执教海港,河南嵩山龙门必须短时间落实选帅直播吧2月27日讯据《足球报》报道,在哈维尔很可能前往海港执教的情况下,河南嵩山龙门需要在短时间之内拿出B计划,尽快确定新一任主教练的人选。去年年底河南队也发生了欠薪,虽……7800亿!超越华为成为国内最大民企!范红卫成中国新女首富作者:子成旧人已去,新人已来。中国女首富又换人了。01hr中国女首富易主一直以来,中国女首富这一称号,都足够吸人眼球。在父亲杨国强的股份加持之后,……
瘦臂针安全吗夏日瘦臂针对性瘦臂法图你属于哪种蝴蝶效应?好吧,不是我们非要牵强附会地硬拉上这个世界著名的连锁反应,但是,露出的那截胖乎乎的胳膊一定会让人觉得你整个人都是肉肉的,但事实上你也许只有这一截才是肉肉的,……孕前女性有哪些饮食禁忌孕前营养通常是指准备生宝宝的爸妈们要补充的营养,这部分营养的补充不可小看,这些都关系到宝宝的健康发育,特别是有一些营养的摄取要在孕前吸收才有效,如果等到妈妈们已经怀上宝宝后,检……揭秘明君在位悍臣满朝阁老最难是什么意思说到大明王朝其实大家都知道的这部电视剧真的是把人看得一愣一愣的,这部剧也被誉为是历史剧中最给力的一部了,是真的拍的好,演义也演的好,剧本也是十分的完美,最近也有人注意到了,那就……冬季草原防火宣传标语草原防火,要加强宣传,要利用张贴防火宣传标语、散发传单、曝光典型火灾案例等多种形式,加强对重点火险区周围乡镇、村庄及偏远地区群众的防火宣传,普及草原防火法律法规和防火知识,不断……三天销售4。22亿元,人均消费9816元元旦假期离岛免税市场放眼世界,聚焦中国欢迎关注DFE(免税零售专家)投稿、广告、业务合作:dfeidutyfree。cn元旦假期,作为旅游热门目的地的海南进岛客流量、旅游人数、离……校园霸凌再次引发舆情,综合多种舆情来看,基层培训刻不容缓头条创作挑战赛看了一夜的足球,也刷了一夜的抖音,本来是非常放松、愉悦的一个夜晚,可偏偏看到了好多让人心情不怎么舒畅的画面。首当其冲的当然是阿根廷对弈沙特的足球比赛,……八仙花怎么浇水四季不同的浇水频率八仙花在春季生长的过程中,需要不断的给其浇水,隔两天浇一次水,确保土壤湿润就可以了,夏季需每天早晨、傍晚时均匀浇一次水,千万不要在阳光下浇水,秋季可隔2~4天浇一次水,不要使土……电筒造句用电筒造句大全31、他们打开手电筒照着石壁和高低不平的泥土地。32、因我公司最近正在寻找听诊器,笔形电筒及外科手术剪等相关附件的供货商。33、用手电筒向13英寸以下的废墟中照进去……69元?买个自带降噪的真无线,这价格也就QCY敢做了吧真无线耳机太贵买不起?想买水果机动辄上千,华为小米也不便宜。那么这款国产价格底部的QCYT17真无线蓝牙耳机你不妨卡看看,一款真无线卖到69元,也是没谁了!几十元你买不到……销售三部曲做人做事成交要做事先做人,销售你的产品,先要销售你自己,情商重于智商,无数的营销大师、销售天才,都在振聋发聩的给人灌输这些销售中的原则和哲理。这昭示着一个浅显的问题:销售的对象是人,……演活陈芊芊就够了,赵露思却演活6个角色,每个都是绝色美人不难看出,娱乐圈从来不缺年轻貌美的小花,有些人就如同昙花一现,没有在这个竞争激烈的市场绽放太久,而能留下来的人无疑有着过人的运气和出众的实力。当下提起95后小花的代表人物……2022年折叠屏适合当主力机了吗?对比直屏旗舰这些关键点不容过去谈及折叠屏手机,相信在很多人都会认为这是厂商们秀肌肉的奢侈品,离自己遥不可及。然而,随着供应链技术不断发展成熟,越来越多的厂商加入进来,加剧折叠屏手机市场竞争,使得如今折叠……
友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找