范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Python数据清洗与整理

  处理缺失值
  In [87]: from pandas import Series,DataFrame import pandas as pd import numpy as np import matplotlib.pyplot as plt  import matplotlib as mpl import seaborn as sns
  In [88]: %matplotlib inline
  In [3]: df1 = DataFrame([[3,5,3],[1,6,np.nan],                 ["lili",np.nan,"pop"],[np.nan,"a","b"]])    # 创建有缺失值的DataFrame df1
  Out[3]:
  0
  1
  2
  0
  3
  5
  3
  1
  1
  6
  NaN   2
  lili   NaN   pop   3
  NaN   a   b 查找缺失值df.isnull()、df.notnull()、df.info()   In [4]: df1.isnull() #True的为缺失值   Out[4]:   0
  1
  2
  0
  False   False   False   1
  False   False   True   2
  False   True   False   3
  True   False   False   In [5]: df1.notnull() #False为缺失值   Out[5]:   0
  1
  2
  0
  True   True   True   1
  True   True   False   2
  True   False   True   3
  False   True   True   In [6]: df1.isnull().sum() # 获取每列的缺失值数量,再通过求和就可以获取整个DataFrame的缺失值数量   Out[6]: 0 1 1 1 2 1 dtype: 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每列数据的缺失值情况 RangeIndex: 4 entries, 0 to 3 Data columns (total 3 columns): 0 3 non-null object 1 3 non-null object 2 3 non-null object dtypes: object(3) memory usage: 176.0+ bytes 删除缺失值df.dropna()、df.dropna(how="all")   In [11]: df1.dropna() # dropna方法可以删除具有缺失值的行,整行删除,传入how="all",则只会删除全为NaN的那些行   Out[11]:   0
  1
  2
  0
  3
  5
  3
  In [17]: df2 = DataFrame(np.arange(12).reshape(3,4)) df2   Out[17]:   0
  1
  2
  3
  0
  0
  1
  2
  3
  1
  4
  5
  6
  7
  2
  8
  9
  10
  11
  In [19]: df2.ix[2,:] = np.nan # 索引为2,即第三行所有列为缺失值 df2[3] = np.nan # 新建列索引为3的所有数据为缺失值 df2   Out[19]:   0
  1
  2
  3
  0
  0.0   1.0   2.0   NaN   1
  4.0   5.0   6.0   NaN   2
  NaN   NaN   NaN   NaN   In [20]: df2.dropna(how="all") # 传入how="all",则只会删除全为NaN的那些行   Out[20]:   0
  1
  2
  3
  0
  0.0   1.0   2.0   NaN   1
  4.0   5.0   6.0   NaN   In [21]: df2.dropna(how="all",axis=1) #axis=1,轴向为列,删除整列为缺失值的,默认为行删除   Out[21]:   0
  1
  2
  0
  0.0   1.0   2.0   1
  4.0   5.0   6.0   2
  NaN   NaN   NaN 填充缺失值df.fillna(0)   In [22]: df2   Out[22]:   0
  1
  2
  3
  0
  0.0   1.0   2.0   NaN   1
  4.0   5.0   6.0   NaN   2
  NaN   NaN   NaN   NaN   In [24]: df2.fillna(0) # 通过fillna方法可以将缺失值替换为常数值   Out[24]:   0
  1
  2
  3
  0
  0.0   1.0   2.0   0.0   1
  4.0   5.0   6.0   0.0   2
  0.0   0.0   0.0   0.0   In [25]: df2.fillna({1:6,3:0}) # 针对列索引1和列索引3的缺失值进行相应的填充 """ 在fillna中传入字典结构数据,可以针对不同列填充不同的值, fillna返回的是新对象,不会对原数据进行修改 """   Out[25]:   0
  1
  2
  3
  0
  0.0   1.0   2.0   0.0   1
  4.0   5.0   6.0   0.0   2
  NaN   6.0   NaN   0.0   In [26]: df2   Out[26]:   0
  1
  2
  3
  0
  0.0   1.0   2.0   NaN   1
  4.0   5.0   6.0   NaN   2
  NaN   NaN   NaN   NaN   In [27]: df2.fillna({1:6,3:0},inplace=True) # 通过inplace就地进行修改 """ 1.df.fillna()函数的功能:该函数的功能是用指定的值去填充dataframe中的缺失值。 2.df.fillna()函数的基本语法:df.fillna(a,[inplace=False]), 其中参数a表示的是常数或字典,若a为常数,则用常数a填充缺失值, 若a为字典,则表示第key列的缺失值用key对应的value值填充, 如:df.fillna({0:10,1:20}),表示用10去填充第0列的缺失值,用20去填充第1列的缺失值; inplace为可选参数,默认为False,表示不修改原对象,若指定inplace=True,则直接修改原对象。 3.df.fillna()函数的返回值:若指定inplace=True,则函数返回值为None,若未指定,则函数返回填充缺失值后的数据。 4.df.fillna()函数的用法补充: 4.1 指定method参数: (1)method="ffill"或"pad",表示用前一个非缺失值去填充该缺失值,语法为df.fillna(method="ffill"); (2)method ="bflii"或"backfill",表示用下一个非缺失值填充该缺失值,语法为df.fillna(method="bflii"); 4.2 指定limit参数和axis参数: limit参数用于指定每列或每行缺失值填充的数量,默认按列操作, axis参数用于指定对行还是对列操作。若axis=0,则对各行数据进行填充,若axis=1,则对各列数据进行填充, 如:df.fillna(method="ffill", limit=1,axis=1) 表示用上一个非缺失值填充该缺失值,且每行中只有一列被填充, 因为method="ffill"并且limit=1,所以每行中只有最先出现缺失值的一列被填充 """ df2   Out[27]:   0
  1
  2
  3
  0
  0.0   1.0   2.0   0.0   1
  4.0   5.0   6.0   0.0   2
  NaN   6.0   NaN   0.0   In [28]: df2.fillna(method="ffill") # method="ffill"或"pad",表示用前一个非缺失值去填充该缺失值   Out[28]:   0
  1
  2
  3
  0
  0.0   1.0   2.0   0.0   1
  4.0   5.0   6.0   0.0   2
  4.0   6.0   6.0   0.0   In [29]: df2   Out[29]:   0
  1
  2
  3
  0
  0.0   1.0   2.0   0.0   1
  4.0   5.0   6.0   0.0   2
  NaN   6.0   NaN   0.0   In [31]: df2[0] = df2[0].fillna(df2[0].mean()) # 指定第0列缺失值通过平均值作为填充数 df2   Out[31]:   0
  1
  2
  3
  0
  0.0   1.0   2.0   0.0   1
  4.0   5.0   6.0   0.0   2
  2.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":["北京", "上海", "北京", "北京"] } df1 = DataFrame(data) df1   Out[33]:   city   name   sex   year   0
  北京   张三   female   2001
  1
  上海   李四   male   2002
  2
  北京   张三   female   2001
  3
  北京   小明   male   2002
  In [34]: df1.duplicated() # 判断各行是否有重复数据,当每行的每个字段都相同时才会判断为重复项   Out[34]: 0 False 1 False 2 True 3 False dtype: bool   In [35]: df1.drop_duplicates() # 删除多余的重复项,当每行的每个字段都相同时才会判断为重复项   Out[35]:   city   name   sex   year   0
  北京   张三   female   2001
  1
  上海   李四   male   2002
  3
  北京   小明   male   2002
  In [36]: df1.drop_duplicates(["sex","year"]) # 指定部分列作为判断重复项的依据,默认保留的数据为第一个出现的组合   Out[36]:   city   name   sex   year   0
  北京   张三   female   2001
  1
  上海   李四   male   2002
  In [39]: df1.drop_duplicates(["sex","year"],keep="last") # 传入keep="last’可以保留最后一个出现的组合   Out[39]:   city   name   sex   year   2
  北京   张三   female   2001
  3
  北京   小明   male   2002 替换值   In [41]: data = { "name":["张三", "李四", "王五", "小明"], "sex":["female", "male", "", "male"], "year":[2001, 2003, 2001, 2002], "city":["北京", "上海", "", "北京"] } df1 = DataFrame(data) df1   Out[41]:   city   name   sex   year   0
  北京   张三   female   2001
  1
  上海   李四   male   2003
  2
  王五   2001
  3
  北京   小明   male   2002
  In [42]: df1.replace("","不详") # 通过replace可完成替换值的功能,空值替换为不详   Out[42]:   city   name   sex   year   0
  北京   张三   female   2001
  1
  上海   李四   male   2003
  2
  不详   王五   不详   2001
  3
  北京   小明   male   2002
  In [43]: df1.replace(["",2001],["不详",2002]) #列表格式 多值替换,空值替换为不详,2001替换为2002   Out[43]:   city   name   sex   year   0
  北京   张三   female   2002
  1
  上海   李四   male   2003
  2
  不详   王五   不详   2002
  3
  北京   小明   male   2002
  In [44]: df1.replace({"":"不详",2001:2002}) #字典格式 多值替换,空值替换为不详,2001替换为2002   Out[44]:   city   name   sex   year   0
  北京   张三   female   2002
  1
  上海   李四   male   2003
  2
  不详   王五   不详   2002
  3
  北京   小明   male   2002 利用函数或映射进行数据转换   In [45]: data = { "name":["张三", "李四", "王五", "小明"], "math":[79, 52, 63, 92] } df2 = DataFrame(data) df2   Out[45]:   math   name   0
  79
  张三   1
  52
  李四   2
  63
  王五   3
  92
  小明   In [46]: def f(x): # 定义函数f if x >= 90: return "优秀" elif 70<=x<90: return "良好" elif 60<=x<70: 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   0
  79
  张三   良好   1
  52
  李四   不合格   2
  63
  王五   合格   3
  92
  小明   优秀   In [49]: del df2["class"] # 删除class列 df2   Out[49]:   math   name   0
  79
  张三   1
  52
  李四   2
  63
  王五   3
  92
  小明   In [50]: df2["class"] = df2["math"].apply(f) #apply函数运行f函数 df2   Out[50]:   math   name   class   0
  79
  张三   良好   1
  52
  李四   不合格   2
  63
  王五   合格   3
  92
  小明   优秀 检测异常值   In [2]: df3 = DataFrame(np.arange(10),columns=["X"]) df3["Y"] = 2 * df3["X"] + 0.5 df3.iloc[9,1] = 185 df3   Out[2]:   X   Y   0
  0
  0.5   1
  1
  2.5   2
  2
  4.5   3
  3
  6.5   4
  4
  8.5   5
  5
  10.5   6
  6
  12.5   7
  7
  14.5   8
  8
  16.5   9
  9
  185.0   In [8]: df3.plot(kind="scatter",x="X",y="Y")   Out[8]:   虚拟变量   在数学建模和机器学习中,只有数值型数据才能供算法使用, 对于一些分类变量则需要将其转换为虚拟变量(哑变量)(也就是0,1矩阵), 通过get_dumnies函数即可实现该功能   In [10]: df = DataFrame({ "朝向":["东","南","东","西","北"], "价格":[1200,2100,2300,2900,1400] }) df   Out[10]:   价格   朝向   0
  1200
  东   1
  2100
  南   2
  2300
  东   3
  2900
  西   4
  1400
  北   In [11]: pd.get_dummies(df["朝向"]) # "朝向" 列转换为虚拟变量(哑变量)(也就是0,1矩阵)   Out[11]:   东   北   南   西   0
  1
  0
  0
  0
  1
  0
  0
  1
  0
  2
  1
  0
  0
  0
  3
  0
  0
  0
  1
  4
  0
  1
  0
  0
  In [12]: df2 = DataFrame({ "朝向":["东/北","西/南","东","西/北","北"], "价格":[1200,2100,2300,2900,1400] }) df2   Out[12]:   价格   朝向   0
  1200
  东/北   1
  2100
  西/南   2
  2300
  东   3
  2900
  西/北   4
  1400
  北   In [16]: dummies = df2["朝向"].apply(lambda x:Series(x.split("/")).value_counts()) # 对于多类别的数据而言,需要通过apply函数来实现 dummies   Out[16]:   东   北   南   西   0
  1.0   1.0   NaN   NaN   1
  NaN   NaN   1.0   1.0   2
  1.0   NaN   NaN   NaN   3
  NaN   1.0   NaN   1.0   4
  NaN   1.0   NaN   NaN   In [19]: dummies = dummies.fillna(0).astype(int) dummies   Out[19]:   东   北   南   西   0
  1
  1
  0
  0
  1
  0
  0
  1
  1
  2
  1
  0
  0
  0
  3
  0
  1
  0
  1
  4
  0
  1
  0
  0 数据合并与重塑   In [43]: price = DataFrame({ "fruit":["apple","banana","orange"], "price":[23,32,45] }) amount = DataFrame({ "fruit":["apple","banana","apple","apple","banana","pear"], "amount":[5,3,6,3,5,7] })   In [44]: price   Out[44]:   fruit   price   0
  apple   23
  1
  banana   32
  2
  orange   45
  In [45]: amount   Out[45]:   amount   fruit   0
  5
  apple   1
  3
  banana   2
  6
  apple   3
  3
  apple   4
  5
  banana   5
  7
  pear merge合并   In [46]: pd.merge(amount,price) # merge函数是通过一个或多个键(DataFrame的列)将两个DataFrame按行合并起来   Out[46]:   amount   fruit   price   0
  5
  apple   23
  1
  6
  apple   23
  2
  3
  apple   23
  3
  3
  banana   32
  4
  5
  banana   32
  In [47]: pd.merge(amount,price,on="fruit") # 指定键名合并   Out[47]:   amount   fruit   price   0
  5
  apple   23
  1
  6
  apple   23
  2
  3
  apple   23
  3
  3
  banana   32
  4
  5
  banana   32
  merge函数常用参数   In [48]: pd.merge(amount,price,left_on="fruit",right_on="fruit") """merge默认为内连接(inner),也就是返回交集。 通过how参数可以选择连接方法: 左连接(left)、右连接(right)和外连接(outer) """   Out[48]:   amount   fruit   price   0
  5
  apple   23
  1
  6
  apple   23
  2
  3
  apple   23
  3
  3
  banana   32
  4
  5
  banana   32
  In [49]: pd.merge(amount,price,how="left")   Out[49]:   amount   fruit   price   0
  5
  apple   23.0   1
  3
  banana   32.0   2
  6
  apple   23.0   3
  3
  apple   23.0   4
  5
  banana   32.0   5
  7
  pear   NaN   In [50]: pd.merge(amount,price,how="right")   Out[50]:   amount   fruit   price   0
  5.0   apple   23
  1
  6.0   apple   23
  2
  3.0   apple   23
  3
  3.0   banana   32
  4
  5.0   banana   32
  5
  NaN   orange   45
  In [52]: pd.merge(amount,price,how="outer")   Out[52]:   amount   fruit   price   0
  5.0   apple   23.0   1
  6.0   apple   23.0   2
  3.0   apple   23.0   3
  3.0   banana   32.0   4
  5.0   banana   32.0   5
  7.0   pear   NaN   6
  NaN   orange   45.0   In [53]: price2 = DataFrame({ "fruit":["apple","banana","orange","apple"], "price":[23,32,45,25] }) amount2 = DataFrame({ "fruit":["apple","banana","apple","apple","banana","pear"], "amount":[5,3,6,3,5,7] })   In [54]: amount2   Out[54]:   amount   fruit   0
  5
  apple   1
  3
  banana   2
  6
  apple   3
  3
  apple   4
  5
  banana   5
  7
  pear   In [55]: price2   Out[55]:   fruit   price   0
  apple   23
  1
  banana   32
  2
  orange   45
  3
  apple   25
  In [57]: pd.merge(amount2,price2)   Out[57]:   amount   fruit   price   0
  5
  apple   23
  1
  5
  apple   25
  2
  6
  apple   23
  3
  6
  apple   25
  4
  3
  apple   23
  5
  3
  apple   25
  6
  3
  banana   32
  7
  5
  banana   32
  In [59]: left = DataFrame({ "key1":["one","one","two"], "key2":["a","b","a"], "val1":[2,3,4] }) right = DataFrame({ "key1":["one","one","two","two"], "key2":["a","a","a","b"], "val2":[5,6,7,8] })   In [60]: left   Out[60]:   key1   key2   val1   0
  one   a   2
  1
  one   b   3
  2
  two   a   4
  In [61]: right   Out[61]:   key1   key2   val2   0
  one   a   5
  1
  one   a   6
  2
  two   a   7
  3
  two   b   8
  In [62]: pd.merge(left,right,on=["key1","key2"],how="outer") # 多键进行合并,即传入一个list即可   Out[62]:   key1   key2   val1   val2   0
  one   a   2.0   5.0   1
  one   a   2.0   6.0   2
  one   b   3.0   NaN   3
  two   a   4.0   7.0   4
  two   b   NaN   8.0   In [63]: pd.merge(left,right,on="key1")   Out[63]:   key1   key2_x   val1   key2_y   val2   0
  one   a   2
  a   5
  1
  one   a   2
  a   6
  2
  one   b   3
  a   5
  3
  one   b   3
  a   6
  4
  two   a   4
  a   7
  5
  two   a   4
  b   8
  In [64]: pd.merge(left,right,on="key1",suffixes=("_left","_right")) # 重复列名的修改,suffixes方法   Out[64]:   key1   key2_left   val1   key2_right   val2   0
  one   a   2
  a   5
  1
  one   a   2
  a   6
  2
  one   b   3
  a   5
  3
  one   b   3
  a   6
  4
  two   a   4
  a   7
  5
  two   a   4
  b   8
  In [66]: left2 = DataFrame({ "key":["a","a","b","b","c"], "val1":range(5) }) right2 = DataFrame({ "val2":[5,7]}, index = ["a","b"] )   In [67]: left2   Out[67]:   key   val1   0
  a   0
  1
  a   1
  2
  b   2
  3
  b   3
  4
  c   4
  In [68]: right2   Out[68]:   val2   a   5
  b   7
  In [70]: pd.merge(left2,right2,left_on="key",right_index=True) """ 连接的键位于DataFrame的行索引上, 可通过传入left_index=True或者right_index=True指定将索引作为连接键来使用 """   Out[70]:   key   val1   val2   0
  a   0
  5
  1
  a   1
  5
  2
  b   2
  7
  3
  b   3
  7
  In [71]: left3 = DataFrame({ "val1":range(4)}, index = ["a","b","a","c"] ) right3 = DataFrame({ "val2":[5,7]}, index = ["a","b"] )   In [72]: left3   Out[72]:   val1   a   0
  b   1
  a   2
  c   3
  In [73]: right3   Out[73]:   val2   a   5
  b   7
  In [74]: left3.join(right3,how="outer") # join方法,可以快速完成按索引合并   Out[74]:   val1   val2   a   0
  5.0   a   2
  5.0   b   1
  7.0   c   3
  NaN concat连接   In [3]: s1 = Series([0,1],index=["a","b"]) s2 = Series([2,3],index=["c","d"]) s3 = Series([4,5],index=["e","f"])   In [4]: pd.concat([s1,s2,s3]) # 需要合并的DataFrame之间没有连接键,通过pandas的concat方法实现   Out[4]: a 0 b 1 c 2 d 3 e 4 f 5 dtype: int64   In [5]: pd.concat([s1,s2,s3],axis=1) # 默认情况下,concat是在axis=0上工作的,通过指定轴向也可以按列进行连接   Out[5]:   0
  1
  2
  a   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]: s4 = pd.concat([s1*10,s3]) s4   Out[6]: a 0 b 10 e 4 f 5 dtype: int64   In [8]: pd.concat([s1,s4],axis=1)   Out[8]:   0
  1
  a   0.0   0
  b   1.0   10
  e   NaN   4
  f   NaN   5
  In [9]: pd.concat([s1,s4],axis=1,join="inner") # concat默认为外连接(并集),传入join="inner’可以实现内连接   Out[9]:   0
  1
  a   0
  0
  b   1
  10
  In [14]: pd.concat([s1,s4],axis=1,join="inner",join_axes=[["b","a"]]) # 通过join_axes指定使用的索引顺序   Out[14]:   0
  1
  b   1
  10
  a   0
  0
  In [15]: pd.concat([s1,s4]) # concat只有内连接和外连接   Out[15]: a 0 b 1 a 0 b 10 e 4 f 5 dtype: int64   In [17]: pd.concat([s1,s4],keys=["one","two"]) # 通过keys参数给连接对象创建一个层次化索引   Out[17]: one a 0 b 1 two a 0 b 10 e 4 f 5 dtype: int64   In [18]: pd.concat([s1,s4],axis=1,keys=["one","two"]) # 如果按列连接,keys就成了DataFrame的列索引   Out[18]:   one   two   a   0.0   0
  b   1.0   10
  e   NaN   4
  f   NaN   5
  In [28]: df1 = DataFrame({ "val1":range(3)}, index = ["a","b","c"] ) df2 = DataFrame({ "val2":[5,7]}, index = ["a","b"] )   In [29]: df1   Out[29]:   val1   a   0
  b   1
  c   2
  In [30]: df2   Out[30]:   val2   a   5
  b   7
  In [32]: pd.concat([df1,df2],axis=1,keys=["one","two"])   Out[32]:   one   two   val1   val2   a   0
  5.0   b   1
  7.0   c   2
  NaN   In [33]: pd.concat({"one":df1,"two":df2},axis=1) # 通过字典数据也可以完成连接,字典的键就是keys的值   Out[33]:   one   two   val1   val2   a   0
  5.0   b   1
  7.0   c   2
  NaN   In [34]: df1 = DataFrame(np.random.randn(3,4),columns=["a","b","c","d"]) df2 = DataFrame(np.random.randn(2,2),columns=["d","c"])   In [35]: df1   Out[35]:   a   b   c   d   0
  0.023541   -0.694903   -0.515242   0.460737   1
  -1.326048   0.259269   -0.685732   0.052237   2
  -0.110079   2.729854   -0.503138   -1.721161   In [36]: df2   Out[36]:   d   c   0
  0.995995   -0.342845   1
  0.848536   1.027354   In [37]: pd.concat([df1,df2])   Out[37]:   a   b   c   d   0
  0.023541   -0.694903   -0.515242   0.460737   1
  -1.326048   0.259269   -0.685732   0.052237   2
  -0.110079   2.729854   -0.503138   -1.721161   0
  NaN   NaN   -0.342845   0.995995   1
  NaN   NaN   1.027354   0.848536   In [38]: pd.concat([df1,df2],ignore_index=True) # 通过ignore_index=‘True’忽略索引,以达到重排索引的效果   Out[38]:   a   b   c   d   0
  0.023541   -0.694903   -0.515242   0.460737   1
  -1.326048   0.259269   -0.685732   0.052237   2
  -0.110079   2.729854   -0.503138   -1.721161   3
  NaN   NaN   -0.342845   0.995995   4
  NaN   NaN   1.027354   0.848536 combine_first合并   In [39]: df1 = DataFrame({ "a":[3,np.nan,6,np.nan], "b":[np.nan,4,6,np.nan] }) df2 = DataFrame({ "a":range(5), "b":range(5) })   In [40]: df1   Out[40]:   a   b   0
  3.0   NaN   1
  NaN   4.0   2
  6.0   6.0   3
  NaN   NaN   In [41]: df2   Out[41]:   a   b   0
  0
  0
  1
  1
  1
  2
  2
  2
  3
  3
  3
  4
  4
  4
  In [42]: df1.combine_first(df2) # 需要合并的两个DataFrame存在重复的索引,使用combine_first方法   Out[42]:   a   b   0
  3.0   0.0   1
  1.0   4.0   2
  6.0   6.0   3
  3.0   3.0   4
  4.0   4.0 数据重塑   In [48]: df = DataFrame(np.arange(9).reshape(3,3), index = ["a","b","c"], columns=["one","two","three"]) df.index.name = "alph" df.columns.name = "number" df   Out[48]:   number   one   two   three   alph   a   0
  1
  2
  b   3
  4
  5
  c   6
  7
  8
  In [50]: result = df.stack() # stack方法用于将DataFrame的列"旋转"为行;默认情况下,数据重塑的操作都是最内层的 result   Out[50]: alph number a one 0 two 1 three 2 b one 3 two 4 three 5 c one 6 two 7 three 8 dtype: int32   In [51]: result.unstack() # unstack方法用于将DataFrame的行"旋转"为列,默认情况下,数据重塑的操作都是最内层的   Out[51]:   number   one   two   three   alph   a   0
  1
  2
  b   3
  4
  5
  c   6
  7
  8
  In [52]: result.unstack(0)   Out[52]:   alph   a   b   c   number   one   0
  3
  6
  two   1
  4
  7
  three   2
  5
  8
  In [53]: result.unstack("alph")   Out[53]:   alph   a   b   c   number   one   0
  3
  6
  two   1
  4
  7
  three   2
  5
  8
  In [54]: df = DataFrame(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   0
  1
  2
  3
  b   4
  5
  6
  7
  two   a   8
  9
  10
  11
  b   12
  13
  14
  15
  In [55]: df.stack()   Out[55]:   apple   orange   one   a   green   1
  3
  red   0
  2
  b   green   5
  7
  red   4
  6
  two   a   green   9
  11
  red   8
  10
  b   green   13
  15
  red   12
  14
  In [56]: df.unstack()   Out[56]:   apple   orange   red   green   red   green   a   b   a   b   a   b   a   b   one   0
  4
  1
  5
  2
  6
  3
  7
  two   8
  12
  9
  13
  10
  14
  11
  15 字符串处理   In [71]: data = { "data":["张三|男", "李四|女", "王五|女", "小明|男"], } df = DataFrame(data) df   Out[71]:   data   0
  张三|男   1
  李四|女   2
  王五|女   3
  小明|男   In [67]: result = df["data"].apply(lambda x:Series(x.split("|"))) # 把数据分成两列,常用的方法是通过函数应用来完成 result   Out[67]:   0
  1
  0
  张三   男   1
  李四   女   2
  王五   女   3
  小明   男   In [81]: new_df = df["data"].str.split("|") # pandas中字段的str属性可以轻松调用字符串的方法 new_df   Out[81]: 0 [张三, 男] 1 [李四, 女] 2 [王五, 女] 3 [小明, 男] Name: data, dtype: object   In [82]: df["name"] = new_df.str[0] # pandas中字段的str属性可以轻松调用字符串的方法 df["sex"] = new_df.str[1] # # pandas中字段的str属性可以轻松调用字符串的方法 df   Out[82]:   data   name   sex   0
  张三|男   张三   男   1
  李四|女   李四   女   2
  王五|女   王五   女   3
  小明|男   小明   男 正则表达式   In [83]: df2 = DataFrame({ "email":["102345@qq.com","342167@qq.com","65132@qq.com"] }) df2   Out[83]:   email   0
  102345@qq.com   1
  342167@qq.com   2
  65132@qq.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   0
  102345@qq.com   102345
  1
  342167@qq.com   342167
  2
  65132@qq.com   65132 综合示例——Iris数据集   In [101]: from pandas import Series,DataFrame import pandas as pd import numpy as np import matplotlib.pyplot as plt #导入pyplot绘图模块 import matplotlib as mpl #导入matplotlib绘图库 import seaborn as sns #导入seaborn绘图库 %matplotlib inline   In [107]: iris_data = pd.read_csv(open("H:python数据分析数据iris-data.csv")) # 读取数据 iris_data.head()   Out[107]:   sepal_length_cm   sepal_width_cm   petal_length_cm   petal_width_cm   class   0
  5.1   3.5   1.4   0.2   Iris-setosa   1
  4.9   3.0   1.4   0.2   Iris-setosa   2
  4.7   3.2   1.3   0.2   Iris-setosa   3
  4.6   3.1   1.5   0.2   Iris-setosa   4
  5.0   3.6   1.4   0.2   Iris-setosa 首先对数据进行简单描述,看其中是否有异常值   In [108]: iris_data.shape # 数据大小行数和列数   Out[108]: (150, 5)   In [110]: iris_data.describe()   Out[110]:   sepal_length_cm   sepal_width_cm   petal_length_cm   petal_width_cm   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]: iris_data["class"].unique() # 去重 # unique函数去除其中重复的元素,并按元素由大到小返回一个新的无元素重复的元组或者列表   Out[112]: array(["Iris-setosa", "Iris-setossa", "Iris-versicolor", "versicolor", "Iris-virginica"], dtype=object)   In [115]: iris_data.ix[iris_data["class"] == "versicolor", "class"] = "Iris-versicolor" iris_data.ix[iris_data["class"] == "Iris-setossa", "class"] = "Iris-setosa" iris_data["class"].unique()   Out[115]: array(["Iris-setosa", "Iris-versicolor", "Iris-virginica"], dtype=object)   In [118]: sns.pairplot(iris_data, hue="class") # 利用seaborn绘制散点图矩阵 F:Anacondaenvsdata-analysislibsite-packages umpylibfunction_base.py:748: RuntimeWarning: invalid value encountered in greater_equal keep = (tmp_a >= mn) F:Anacondaenvsdata-analysislibsite-packages umpylibfunction_base.py:749: RuntimeWarning: invalid value encountered in less_equal keep &= (tmp_a <= mx)   Out[118]:   In [119]: iris_data.ix[iris_data["class"] == "Iris-setosa", "sepal_width_cm"].hist()   Out[119]:   In [125]: iris_data = iris_data.loc[(iris_data["class"] != "Iris-setosa") | (iris_data["sepal_width_cm"] >= 2.5)] iris_data.loc[iris_data["class"] == "Iris-setosa", "sepal_width_cm"].hist()   Out[125]:   In [126]: iris_data.loc[(iris_data["class"] == "Iris-versicolor") & (iris_data["sepal_length_cm"] < 1.0)]   Out[126]:   sepal_length_cm   sepal_width_cm   petal_length_cm   petal_width_cm   class   77
  0.067   3.0   5.0   1.7   Iris-versicolor   78
  0.060   2.9   4.5   1.5   Iris-versicolor   79
  0.057   2.6   3.5   1.0   Iris-versicolor   80
  0.055   2.4   3.8   1.1   Iris-versicolor   81
  0.055   2.4   3.7   1.0   Iris-versicolor   In [127]: iris_data.loc[(iris_data["class"] == "Iris-versicolor") & (iris_data["sepal_length_cm"] < 1.0), "sepal_length_cm"] *= 100.0   In [128]: iris_data.isnull().sum()   Out[128]: sepal_length_cm 0 sepal_width_cm 0 petal_length_cm 0 petal_width_cm 5 class 0 dtype: int64   In [131]: iris_data[iris_data["petal_width_cm"].isnull()]   Out[131]:   sepal_length_cm   sepal_width_cm   petal_length_cm   petal_width_cm   class   7
  5.0   3.4   1.5   NaN   Iris-setosa   8
  4.4   2.9   1.4   NaN   Iris-setosa   9
  4.9   3.1   1.5   NaN   Iris-setosa   10
  5.4   3.7   1.5   NaN   Iris-setosa   11
  4.8   3.4   1.6   NaN   Iris-setosa   In [132]: iris_data.dropna(inplace=True) # 将缺失值进行删除处理   In [133]: iris_data.to_csv("H:python数据分析数据iris-clean-data.csv", index=False) # 最后对清洗好的数据进行存储   In [135]: iris_data = pd.read_csv(open("H:python数据分析数据iris-clean-data.csv")) iris_data.head()   Out[135]:   sepal_length_cm   sepal_width_cm   petal_length_cm   petal_width_cm   class   0
  5.1   3.5   1.4   0.2   Iris-setosa   1
  4.9   3.0   1.4   0.2   Iris-setosa   2
  4.7   3.2   1.3   0.2   Iris-setosa   3
  4.6   3.1   1.5   0.2   Iris-setosa   4
  5.0   3.6   1.4   0.2   Iris-setosa   In [136]: iris_data.shape   Out[136]: (144, 5)数据探索   In [137]: sns.pairplot(iris_data, hue="class") # 绘制散点矩阵图   Out[137]:   In [145]: iris_data.boxplot(column="petal_length_cm", by="class",grid=False,figsize=(6,6)) # boxplot用于绘制箱形图,figsize可设置画布的大小 F:Anacondaenvsdata-analysislibsite-packages umpycorefromnumeric.py:57: FutureWarning: reshape is deprecated and will raise in a subsequent release. Please use .values.reshape(...) instead return getattr(obj, method)(*args, **kwds)   Out[145]:   In [139]: iris_data.boxplot? # 箱型图查询帮助

油价调整最新消息!10月9日,92号95号汽油,柴油最新油价第19轮国内成品油价格调整将于明晚(2022年10月10日24时)进行,由于国际油价5天上涨近15,前7个工作日累计下调油价已经被抹平,折算后为累计上调10元吨,未达到上调标准线5长春商转公贷款业务指南第一条申请商转公贷款应当符合下列条件(一)借款申请人为原商业贷款的借款人(二)借款申请人在中心正常缴存住房公积金6个月(含)以上,符合借款申请人提出申请时的住房公积金存量房贷款政策油价明晚调整!92重回7元梦碎!搁浅概率大摘要国际周末国际休市,暂无原油指引。国内10月9日(第9个工作日),预测累计上涨幅度为10元吨,现处搁浅阶段。云供油今日报价广东地区国六柴油0自提价8940元吨,配送价9000元吨国庆节后尿素价格有变,抓紧看!复合肥磷肥钾肥最新价是多少国庆节已经过完了,寒露节气也到了,部分小麦产区也开始播种小麦,同时也说明秋季用肥集中采购期过去了,进入扫尾阶段。从国庆假放假到如今,尿素市场成交量不高,厂家价格出现小幅回落调整。在蓝色聚合发展动能绿色孕育共富希望在湛江东海岛,世界级绿色石化产业集群加速崛起。林江海摄数说发展十三五以来,沿海经济带东翼(汕头汕尾潮州揭阳4市)沿海经济带西翼(阳江茂名湛江3市)北部生态发展区5市人均地区生产总值以智能科技引领现代产业位于天津市的我国首个海洋油气装备智能制造项目组块实现全面封顶。张鹏摄天津拥有联合国产业分类中全部41个工业大类207个工业中类中的191个666个工业小类中的606个,是全国工业产负债人,上岸必备负债,在当下社会早已司空见惯,据统计,2022年我们国家大约有7亿人负债,人均负债金额高达13。34万元。抛开房贷车贷这些固定可控的负债,我们只谈信用卡网贷等灵活的负债,一旦负债过今日油价2022年10月9日9295汽油,柴油价格,明晚或油价上涨明晚12点(10月10日24时)将进行今年第19次油价调整,目前经过9个工作日的统计,预计油价上调15元吨,距离上调标准只差35元吨。大家相互转告,明晚油价有可能重新上涨了。今日油欧佩克宣布减产,难以动摇油价中长期下降趋势内容提要1欧佩克宣布减产应对油价急跌2对俄石油限价,也同时封堵了海湾石油价格上涨空间3美正在酝酿新的二级制裁立法,确保对俄石油限价效力4美国正准备让委内瑞拉石油重返市场,填补海湾减肝硬化脂肪肝患者饮食起居和自我保健脂肪肝患者的自我保健上海中医药大学肝病研究所曙光医院肝硬化科徐列明教授患了脂肪肝怎么办?因为没有症状,部分患者采取了不予理睬的态度,听之任之。即使因病前来就诊的患者,在听了医生要求午睡不重要?别小看这10几分钟,5个好处追着你跑午饭吃过了,要倒一觉,这是不是很多人习惯?哪怕睡不着,闭目养神半个小时,下午工作和学习的状态都会不一样,就算去公园下象棋,都能多吃对方几个棋子。有的人却没有午睡的习惯,那今天就来看
每年近千万名孕妇因这项技术受惠华人科学家会再拿诺贝尔吗?出品丨虎嗅科技组作者丨苏北佛楼蜜题图丨视觉中国诺奖风向标向一位华人科学家抛出了橄榄枝。当地时间2022年9月28日,生物医学领域的重要奖项拉斯克奖(TheLaskerAwards)人民币的贬值,对普通人有哪些影响?人民币贬值这个事情,对咱普通人有没有影响呢,先说结论,从某种角度看,影响最大的就是普通人。短短两个月,离岸人民币从6。3减到6。8,这个贬值的速度比2018年还要猛。这对我们普通人荣耀也有性价比,现阶段仅推荐这三款手机,其他的都不用看现在提起荣耀很多人说是回到过去了,全是低配高价产品,没有性价比,但是从今年国内的销量来看荣耀并不是这样,相反能在第一季度,第二季度都做到国内第一确实不容易。那么今天就给大家推荐三款天道你一辈子能赚多少钱,不是努力决定的,而是思维和认知在进入社会之前,相信大家都曾幻想过住大房子,开好车,赚很多的钱可是开始工作之后,我们一次又一次被生活蹂躏,渐渐意识到原来赚钱是世界上最难的事情,后来我们不得不向现实妥协,承认自己的资本疯狂润向中国,欧盟对华投资同比增长123。7中国非常重视每年的外资使用数据。现在的中国其实已经不怎么缺资本了,大量的资本无处可投,导致收益率逐年降低,但中国还是非常重视每年有多少外资来中国投资。因为这个数据并不仅仅代表着来了广东经济成绩单,深圳高居榜首,广州位居第2,茂名力压江门说到广东,大家应该都不陌生!广东的土地面积不算太大,但是拥有极好的地理条件,是一处特产非常之多的省份!广东省下辖20多座地级市,是一处经济发展非常快速的省份!但是各城市之间的发展状英镑大跌后,美国人来抄底了!黑石老板6亿买下英国庄园本周以来,受英国政府公布迷你预算案影响,英镑兑美元汇率一度跌至1。033,兑人民币汇率一度跌至7。47,均创历史新低。与此同时,趁着英镑汇率处于低位,包括美国资本在内的不少外国投资A股没节操的事太多了大家好,我是大牛哥!大A早上让人看着还挺激动的,高开了将近20个点,那是沾了昨夜美股的光,美股大涨了。相信不少朋友以为A股能学一把美股,来一个逆风翻盘,结果吃完午饭回来,A股又跳水佐餐领军品牌,紫燕食品利用经销商模式加快跑马圈地,抢占先机(报告出品方分析师国金证券刘宸倩)佐餐卤味领军品牌,转型大商制后快速占领华东紫燕品牌悠久,领军佐餐卤味紫燕百味鸡的前身为钟记油烫鸭,1989年在江苏徐州成立,主营卤鸭制品1996年凯迪拉克LYRIQ锐歌正式发运即将交付!构建全新体验汽车电动化是全球汽车产业转型升级绿色发展的主要方向,目前,我国电动汽车产销量已连续七年位居全球第一,成为全球汽车产业电动化转型的关键力量。而作为从燃油向电动化变革的核心技术载体,动2022中国物业上市公司价值榜TOP30出炉前三名分值占近四成,超五成企业来自广东上海每经记者陈利每经编辑魏文艺2022年,对房地产行业来说是比较艰难的一年,对物业行业而言则是考验内生增长的一年。那么,2022年哪些物业上市公司引领行业?物业上市公司的价值分布区间怎