Python数据分析

冷暖自知 提交于 2019-11-28 14:32:08
1  基础知识
In [2]:

num = [1,2,3,4,5]
[i**2 for i in num]
Out[2]:
[1, 4, 9, 16, 25]
In [5]:

lst1 = ['A','B','C']
lst2 = ['a','b','c']
[m+n for m in lst1 for n in lst2]
Out[5]:
['Aa', 'Ab', 'Ac', 'Ba', 'Bb', 'Bc', 'Ca', 'Cb', 'Cc']
In [7]:

lst1 = ['A','B','C']
lst2 = ['a','b','c']
[m+n for m,n in zip(lst1,lst2)]
Out[7]:
['Aa', 'Bb', 'Cc']
In [8]:

f = lambda x,y : x+y
f(1,2)
Out[8]:
3
In [10]:

a = map(lambda x,y : x+y, [1,2,3],[4,5,6])
a
Out[10]:
<map at 0x4dd7198>
In [11]:

b = list(map(lambda x,y : x+y, [1,2,3],[4,5,6]))
b
Out[11]:
[5, 7, 9]
2  Pandas
In [12]:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
2.1  Series
In [32]:

# 一组数据与一组索引组成的类似一维数组的数据结构
In [18]:

# 传入列表,默认数据标签
s1 = pd.Series(['a','b','c','d'])
s1
Out[18]:
0    a
1    b
2    c
3    d
dtype: object
In [19]:

# 传入index,自定义数据标签
s2 = pd.Series([10,20,30,40],index=['a','b','c','d'])
s2
Out[19]:
a    10
b    20
c    30
d    40
dtype: int64
In [20]:

# 以字典形式自定义数据标签
s3 = pd.Series({'a':1,'b':2,'c':3,'d':4})
s3
Out[20]:
a    1
b    2
c    3
d    4
dtype: int64
In [26]:

# .index 获取索引
s1.index
Out[26]:
RangeIndex(start=0, stop=4, step=1)
In [27]:

s2.index
Out[27]:
Index(['a', 'b', 'c', 'd'], dtype='object')
In [28]:

s3.index
Out[28]:
Index(['a', 'b', 'c', 'd'], dtype='object')
In [29]:

# values 获取值
s1.values
Out[29]:
array(['a', 'b', 'c', 'd'], dtype=object)
In [30]:

s2.values
Out[30]:
array([10, 20, 30, 40], dtype=int64)
In [31]:

s3.values
Out[31]:
array([1, 2, 3, 4], dtype=int64)
2.2  DataFrame
In [33]:

# 一组数据与一对索引{行和列}组成的表格型数据结构
In [41]:

# 不指定索引,索引默认从0开始
df1 = pd.DataFrame(['a','b','c','d'])
df1
Out[41]:
0
0    a
1    b
2    c
3    d
In [40]:

# 嵌套的列表会显示成多行多列
df2 = pd.DataFrame([['A','a'],['B','b'],['C','c'],['D','d']])
df2
Out[40]:
0    1
0    A    a
1    B    b
2    C    c
3    D    d
In [44]:

# 嵌套的列表可替换为元组
df3 = pd.DataFrame([('A','a'),('B','b'),('C','c'),('D','d')])
df3
Out[44]:
0    1
0    A    a
1    B    b
2    C    c
3    D    d
In [46]:

# columns设置列索引
df4 = pd.DataFrame([['A','a'],['B','b'],['C','c'],['D','d']],columns=['大写','小写'])
df4
Out[46]:
大写    小写
0    A    a
1    B    b
2    C    c
3    D    d
In [47]:

# index 设置行索引
df5 = pd.DataFrame([['A','a'],['B','b'],['C','c'],['D','d']],index=list('1234'))
df5
Out[47]:
0    1
1    A    a
2    B    b
3    C    c
4    D    d
In [48]:

df6 = pd.DataFrame([['A','a'],['B','b'],['C','c'],['D','d']],columns=['大写','小写'],index=[1,2,3,4])
df6
Out[48]:
大写    小写
1    A    a
2    B    b
3    C    c
4    D    d
In [49]:

# 传入字典
df7 = pd.DataFrame({'大写':['A','B','C','D'],'小写':['a','b','c','d']})
df7
Out[49]:
大写    小写
0    A    a
1    B    b
2    C    c
3    D    d
In [54]:

# 传入字典
df7 = pd.DataFrame({'大写':['A','B','C','D'],'小写':['a','b','c','d']},index=[1,2,3,4])
df7
Out[54]:
大写    小写
1    A    a
2    B    b
3    C    c
4    D    d
In [55]:

df2.index
Out[55]:
RangeIndex(start=0, stop=4, step=1)
In [51]:

df7.index
Out[51]:
Int64Index([1, 2, 3, 4], dtype='int64')
In [52]:

df7.columns
Out[52]:
Index(['大写', '小写'], dtype='object')
In [53]:

df7.values
Out[53]:
array([['A', 'a'],
       ['B', 'b'],
       ['C', 'c'],
       ['D', 'd']], dtype=object)
In [56]:

df2.values
Out[56]:
array([['A', 'a'],
       ['B', 'b'],
       ['C', 'c'],
       ['D', 'd']], dtype=object)
2.3  导入数据
In [52]:

# pd.read_excel()
# pd.read_csv()    可以导入csv和txt
# pd.read_table()    可以导入csv和txt
# pd.read_sql()
In [3]:

import pandas as pd
# 导入EXCEL,默认读取第1个sheet
df = pd.read_excel(r"C:\Users\Administrator\Desktop\pandas\a.xlsx")
print(df)
    x   y   z
a  56  65  55
b  25  97  52
c  12  38  43
d  90  14  95
e  22  86  38
In [5]:

# sheet_name = 'sheet名'  指定要读取的sheet的名字
df = pd.read_excel(r"C:\Users\Administrator\Desktop\pandas\a.xlsx",sheet_name='C')
print(df)
    x   y   z
a  97  69  94
b  85  76  25
c  77  62  70
d  93  51  34
e  39   2  73
In [7]:

# sheet_name = num  指定要读取的sheet的编号,默认从0开始
df = pd.read_excel(r"C:\Users\Administrator\Desktop\pandas\a.xlsx",sheet_name=1)
print(df)
    x   y   z
a  43  70  83
b  13  80  85
c  74  69  52
d  71  78   3
e  61  41  28
In [14]:

# 行列索引  行列索引默认为0,行索引默认第一列,列索引默认为第一行,index_col=num,header=num
df = pd.read_excel(r"C:\Users\Administrator\Desktop\pandas\a.xlsx",index_col=0,header=0)
print(df)
df = pd.read_excel(r"C:\Users\Administrator\Desktop\pandas\a.xlsx",index_col=1,header=1)
print(df)
# header=None 自动创建数字索引,不用表头作为索引
df = pd.read_excel(r"C:\Users\Administrator\Desktop\pandas\a.xlsx",index_col=0,header=None)
print(df)
    x   y   z
a  56  65  55
b  25  97  52
c  12  38  43
d  90  14  95
e  22  86  38
    a  65  55
56           
25  b  97  52
12  c  38  43
90  d  14  95
22  e  86  38
      1   2   3
0              
NaN   x   y   z
a    56  65  55
b    25  97  52
c    12  38  43
d    90  14  95
e    22  86  38
In [36]:

# usecols指定导入列,nrows指定导入行数
df = pd.read_excel(r"C:\Users\Administrator\Desktop\pandas\a.xlsx",usecols=0)
print(df)
df = pd.read_excel(r"C:\Users\Administrator\Desktop\pandas\a.xlsx",usecols=[2,3],nrows=2)
print(df)
   a
0  b
1  c
2  d
3  e
    y   z
0  65  55
1  97  52
In [51]:

# 导入CSV 分隔符不同时需指明分隔符{逗号,空格,制表符}
df = pd.read_csv(r"C:\Users\Administrator\Desktop\pandas\a.csv")
print(df)
df = pd.read_csv(r"C:\Users\Administrator\Desktop\pandas\a.csv",sep=' ')
print(df)
df = pd.read_table(r"C:\Users\Administrator\Desktop\pandas\a.txt",sep='\t')
print(df)
  Unnamed: 0   x   y   z
0          a  56  65  55
1          b  25  97  52
2          c  12  38  43
3          d  90  14  95
4          e  22  86  38
       ,x,y,z
0  a,56,65,55
1  b,25,97,52
2  c,12,38,43
3  d,90,14,95
4  e,22,86,38
  Unnamed: 0   x   y   z
0          a  56  65  55
1          b  25  97  52
2          c  12  38  43
3          d  90  14  95
4          e  22  86  38
In [37]:

# 指明读取行数
df = pd.read_csv(r"C:\Users\Administrator\Desktop\pandas\a.csv",nrows=2)
print(df)
  Unnamed: 0   x   y   z
0          a  56  65  55
1          b  25  97  52
In [40]:

# 指定编码格式 encoding = gbk/utf-8
df = pd.read_csv(r"C:\Users\Administrator\Desktop\pandas\a.csv",encoding='utf-8')
print(df)
  Unnamed: 0   x   y   z
0          a  56  65  55
1          b  25  97  52
2          c  12  38  43
3          d  90  14  95
4          e  22  86  38
In [45]:

# 路径有中文名,需指定engine
df = pd.read_csv(r"C:\Users\Administrator\Desktop\pandas\新建文件夹\a.csv",engine='python')
print(df)
  Unnamed: 0   x   y   z
0          a  56  65  55
1          b  25  97  52
2          c  12  38  43
3          d  90  14  95
4          e  22  86  38
In [54]:

# 导入txt文件,需注意分隔符 sep={逗号,空格,制表符},read_csv和read_table都可以导入csv和txt文件
df = pd.read_table(r"C:\Users\Administrator\Desktop\pandas\a.txt",sep='\t')
print(df)
df = pd.read_table(r"C:\Users\Administrator\Desktop\pandas\a.csv",sep=',')
print(df)
  Unnamed: 0   x   y   z
0          a  56  65  55
1          b  25  97  52
2          c  12  38  43
3          d  90  14  95
4          e  22  86  38
  Unnamed: 0   x   y   z
0          a  56  65  55
1          b  25  97  52
2          c  12  38  43
3          d  90  14  95
4          e  22  86  38
In [67]:

# 常用函数
df = pd.read_csv(r"C:\Users\Administrator\Desktop\pandas\a.csv",encoding='utf-8')
print(df.shape)    # 行列数
print(df.head(2))  # 打印前n行
print(df.columns)  # 打印表头
print(df.index)    # 打印index
print(df.info())   # 输出整表的数据结构
print(df.describe())  # 输出每列多种计算
(5, 4)
  Unnamed: 0   x   y   z
0          a  56  65  55
1          b  25  97  52
Index(['Unnamed: 0', 'x', 'y', 'z'], dtype='object')
RangeIndex(start=0, stop=5, step=1)
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 4 columns):
Unnamed: 0    5 non-null object
x             5 non-null int64
y             5 non-null int64
z             5 non-null int64
dtypes: int64(3), object(1)
memory usage: 240.0+ bytes
None
               x          y          z
count   5.000000   5.000000   5.000000
mean   41.000000  60.000000  56.600000
std    31.953091  34.168699  22.523321
min    12.000000  14.000000  38.000000
25%    22.000000  38.000000  43.000000
50%    25.000000  65.000000  52.000000
75%    56.000000  86.000000  55.000000
max    90.000000  97.000000  95.000000
2.4  数据预处理
2.4.1  缺失值查找处理
In [70]:

# info()返回全部数据类型,可查看缺失值
# isnull()方法可定位缺失值
df = pd.read_excel(r"C:\Users\Administrator\Desktop\pandas\b.xlsx")
print(df.info())
print(df.isnull())
<class 'pandas.core.frame.DataFrame'>
Index: 5 entries, a to e
Data columns (total 3 columns):
x    4 non-null float64
y    4 non-null float64
z    4 non-null float64
dtypes: float64(3)
memory usage: 160.0+ bytes
None
       x      y      z
a  False  False   True
b  False  False  False
c   True  False  False
d  False   True  False
e  False  False  False
In [74]:

# 删除缺失值的行
df = pd.read_excel(r"C:\Users\Administrator\Desktop\pandas\b.xlsx")
print(df)
print(df.dropna(how='any'))
print(df.dropna(how='all'))
      x     y     z
a  56.0  65.0   NaN
b  25.0  97.0  52.0
c   NaN  38.0  43.0
d  90.0   NaN  95.0
e  22.0  86.0  38.0
f   NaN   NaN   NaN
      x     y     z
b  25.0  97.0  52.0
e  22.0  86.0  38.0
      x     y     z
a  56.0  65.0   NaN
b  25.0  97.0  52.0
c   NaN  38.0  43.0
d  90.0   NaN  95.0
e  22.0  86.0  38.0
In [4]:

# 缺失值填充
import pandas as pd
df = pd.read_excel(r"C:\Users\Administrator\Desktop\pandas\b.xlsx")
print(df)
df = df.fillna(0)
print(df)
      x     y     z
a  56.0  65.0   NaN
b  25.0  97.0  52.0
c   NaN  38.0  43.0
d  90.0   NaN  95.0
e  22.0  86.0  38.0
f   NaN   NaN   NaN
      x     y     z
a  56.0  65.0   0.0
b  25.0  97.0  52.0
c   0.0  38.0  43.0
d  90.0   0.0  95.0
e  22.0  86.0  38.0
f   0.0   0.0   0.0
In [29]:

import pandas as pd
import numpy as np
df = pd.DataFrame({'编号':['A1','A2','A3','A4'],'年龄':['54','16',np.nan,'41'],'性别':['男',np.nan,np.nan,'女']})
print(df)
df = df.fillna({'性别':'男','年龄':30})
print(df)
   编号   年龄   性别
0  A1   54    男
1  A2   16  NaN
2  A3  NaN  NaN
3  A4   41    女
   编号  年龄 性别
0  A1  54  男
1  A2  16  男
2  A3  30  男
3  A4  41  女
2.4.2  重复值删除
In [30]:

# drop_duplicates删除重复值,默认保留第一个
import pandas as pd
import numpy as np
df = pd.read_excel(r"C:\Users\Administrator\Desktop\pandas\b.xlsx",sheet_name='B')
print(df)
print('--------------------------')
df = df.drop_duplicates()
print(df)
    x   y   z
a  43  70  83
b  13  80  85
b  13  80  85
c  74  69  52
d  71  80  85
e  61  80  85
f   1   2   3
--------------------------
    x   y   z
a  43  70  83
b  13  80  85
c  74  69  52
d  71  80  85
e  61  80  85
f   1   2   3
In [21]:

# drop_duplicates(subset=['y','z'])删除某列/几列重复值,默认保留第一个,
import pandas as pd
import numpy as np
df = pd.read_excel(r"C:\Users\Administrator\Desktop\pandas\b.xlsx",sheet_name='B')
print(df)
print('--------------------------')
df = df.drop_duplicates(['y','z'])
print(df)
    x   y   z
a  43  70  83
b  13  80  85
c  74  69  52
d  71  80  85
e  61  80  85
b  13  80  85
f   1   2   3
--------------------------
    x   y   z
a  43  70  83
b  13  80  85
c  74  69  52
f   1   2   3
In [24]:

# drop_duplicates(subset=[],keep=first/last/False)删除某列/几列重复值,keep保留第一个/最后一个/不保留
import pandas as pd
import numpy as np
df = pd.read_excel(r"C:\Users\Administrator\Desktop\pandas\b.xlsx",sheet_name='B')
print(df)
print('--------------------------')
df = df.drop_duplicates(subset=['y','z'],keep='last')
print(df)
    x   y   z
a  43  70  83
b  13  80  85
b  13  80  85
c  74  69  52
d  71  80  85
e  61  80  85
f   1   2   3
--------------------------
    x   y   z
a  43  70  83
c  74  69  52
e  61  80  85
f   1   2   3
In [28]:

# drop_duplicates(subset=[],keep=first/last/False)删除某列/几列重复值,keep保留第一个/最后一个/不保留
import pandas as pd
import numpy as np
df = pd.read_excel(r"C:\Users\Administrator\Desktop\pandas\b.xlsx",sheet_name='B')
print(df)
print('--------------------------')
df = df.drop_duplicates(subset=['y','z'],keep=False)
print(df)
    x   y   z
a  43  70  83
b  13  80  85
b  13  80  85
c  74  69  52
d  71  80  85
e  61  80  85
f   1   2   3
--------------------------
    x   y   z
a  43  70  83
c  74  69  52
f   1   2   3
2.4.3  类型转换
In [52]:

# dtype  查看数据类型
df = pd.read_excel(r"C:\Users\Administrator\Desktop\pandas\b.xlsx",sheet_name='C')
print(df['唯一识别码'].dtype)
int64
In [35]:

# dtype  查看设置数据类型,astype  设置数据类型
df = pd.read_excel(r"C:\Users\Administrator\Desktop\pandas\b.xlsx",sheet_name='C',dtype={'唯一识别码':'float64'})
print(df)
  订单编号 客户姓名  唯一识别码       成交时间
0   A1   张通  101.0 2018-08-08
1   A2   李谷  102.0 2018-08-09
2   A3   孙凤  103.0 2018-08-10
3   A3   孙凤  103.0 2018-08-10
4   A4   赵恒  104.0 2018-08-11
5   A5   赵恒  104.0 2018-08-12
In [53]:

df = pd.read_excel(r"C:\Users\Administrator\Desktop\pandas\b.xlsx",sheet_name='C')
df = df['唯一识别码'].astype('float64')
print(df)
0    101.0
1    102.0
2    103.0
3    103.0
4    104.0
5    104.0
Name: 唯一识别码, dtype: float64
2.4.4  索引设置
In [78]:

# 没有索引,默认用0自然数作为索引
# df.columns 设置列索引,df.index设置行索引
# set_index() 设置索引
df = pd.read_excel(r"C:\Users\Administrator\Desktop\pandas\b.xlsx",sheet_name='C')
print(df)
df.columns=['A','B','C','D','E']
print(df)
df.index=[10,20,30,40,50,60]
print(df)
df.set_index('A',inplace=True)
print(df)
  订单编号 客户姓名  唯一识别码       成交时间  数量
0   A1   张通    101 2018-08-08  17
1   A2   李谷    102 2018-08-09  45
2   A3   孙凤    103 2018-08-10   5
3   A3   孙凤    103 2018-08-10  49
4   A4   赵恒    104 2018-08-11  22
5   A5   赵恒    104 2018-08-12  54
    A   B    C          D   E
0  A1  张通  101 2018-08-08  17
1  A2  李谷  102 2018-08-09  45
2  A3  孙凤  103 2018-08-10   5
3  A3  孙凤  103 2018-08-10  49
4  A4  赵恒  104 2018-08-11  22
5  A5  赵恒  104 2018-08-12  54
     A   B    C          D   E
10  A1  张通  101 2018-08-08  17
20  A2  李谷  102 2018-08-09  45
30  A3  孙凤  103 2018-08-10   5
40  A3  孙凤  103 2018-08-10  49
50  A4  赵恒  104 2018-08-11  22
60  A5  赵恒  104 2018-08-12  54
     B    C          D   E
A                         
A1  张通  101 2018-08-08  17
A2  李谷  102 2018-08-09  45
A3  孙凤  103 2018-08-10   5
A3  孙凤  103 2018-08-10  49
A4  赵恒  104 2018-08-11  22
A5  赵恒  104 2018-08-12  54
In [85]:

# 重命名索引
df = pd.read_excel(r"C:\Users\Administrator\Desktop\pandas\b.xlsx",sheet_name='C')
print(df) 
df = df.rename(columns={'订单编号':'ID'})
print(df) 
df = df.rename(index={1:'一',2:'二',3:'三'})
print(df)
  订单编号 客户姓名  唯一识别码       成交时间  数量
0   A1   张通    101 2018-08-08  17
1   A2   李谷    102 2018-08-09  45
2   A3   孙凤    103 2018-08-10   5
3   A3   孙凤    103 2018-08-10  49
4   A4   赵恒    104 2018-08-11  22
5   A5   赵恒    104 2018-08-12  54
   ID 客户姓名  唯一识别码       成交时间  数量
0  A1   张通    101 2018-08-08  17
1  A2   李谷    102 2018-08-09  45
2  A3   孙凤    103 2018-08-10   5
3  A3   孙凤    103 2018-08-10  49
4  A4   赵恒    104 2018-08-11  22
5  A5   赵恒    104 2018-08-12  54
   ID 客户姓名  唯一识别码       成交时间  数量
0  A1   张通    101 2018-08-08  17
一  A2   李谷    102 2018-08-09  45
二  A3   孙凤    103 2018-08-10   5
三  A3   孙凤    103 2018-08-10  49
4  A4   赵恒    104 2018-08-11  22
5  A5   赵恒    104 2018-08-12  54
In [31]:

# 重置索引  
import pandas as pd
df = pd.read_excel(r"C:\Users\Administrator\Desktop\pandas\b.xlsx",sheet_name='D')
print(df)
print(df.set_index('c'))
print(df.set_index(['a','b']))
print(df.reset_index())
     a    b  c  d
0  bar  one  z  1
1  bar  two  y  2
2  foo  one  x  3
3  foo  two  w  4
     a    b  d
c             
z  bar  one  1
y  bar  two  2
x  foo  one  3
w  foo  two  4
         c  d
a   b        
bar one  z  1
    two  y  2
foo one  x  3
    two  w  4
   index    a    b  c  d
0      0  bar  one  z  1
1      1  bar  two  y  2
2      2  foo  one  x  3
3      3  foo  two  w  4
2.5  数据选择
2.5.1  列选择
In [57]:

#  生成连续数组 np.arange()
#  生成连续时间 pd.date_range(20190101,periods=7),如果是end=20190101则最后日期为20190101
import pandas as pd
import numpy as np
df = pd.DataFrame({'序号':np.arange(1,6),'订单编号':['A1','A2','A3','A4','A5'],'客户姓名':['张通','李谷','孙凤','赵恒','赵恒'],'成交时间':pd.date_range('20180808',periods=5),'唯一识别码':[101,102,103,104,104],'销售ID':[1,2,1,2,3]})
print(df)
#  直接列名
print(df[['订单编号','客户姓名']])
   序号 订单编号 客户姓名       成交时间  唯一识别码  销售ID
0   1   A1   张通 2018-08-08    101     1
1   2   A2   李谷 2018-08-09    102     2
2   3   A3   孙凤 2018-08-10    103     1
3   4   A4   赵恒 2018-08-11    104     2
4   5   A5   赵恒 2018-08-12    104     3
  订单编号 客户姓名
0   A1   张通
1   A2   李谷
2   A3   孙凤
3   A4   赵恒
4   A5   赵恒
In [70]:

#  iloc  根据列index选取
df = pd.DataFrame({'序号':np.arange(1,6),'订单编号':['A1','A2','A3','A4','A5'],'客户姓名':['张通','李谷','孙凤','赵恒','赵恒'],'成交时间':pd.date_range('20180808',periods=5),'唯一识别码':[101,102,103,104,104],'销售ID':[1,2,1,2,3]})
print(df)
print(df.iloc[:,[0,3]])    # 中括号+逗号选取不连续的列
print(df.iloc[:,0:3])      # 直接切片选取连续的列
   序号 订单编号 客户姓名       成交时间  唯一识别码  销售ID
0   1   A1   张通 2018-08-08    101     1
1   2   A2   李谷 2018-08-09    102     2
2   3   A3   孙凤 2018-08-10    103     1
3   4   A4   赵恒 2018-08-11    104     2
4   5   A5   赵恒 2018-08-12    104     3
   序号       成交时间
0   1 2018-08-08
1   2 2018-08-09
2   3 2018-08-10
3   4 2018-08-11
4   5 2018-08-12
   序号 订单编号 客户姓名
0   1   A1   张通
1   2   A2   李谷
2   3   A3   孙凤
3   4   A4   赵恒
4   5   A5   赵恒
In [71]:

#  loc  根据列名选取
df = pd.DataFrame({'序号':np.arange(1,6),'订单编号':['A1','A2','A3','A4','A5'],'客户姓名':['张通','李谷','孙凤','赵恒','赵恒'],'成交时间':pd.date_range('20180808',periods=5),'唯一识别码':[101,102,103,104,104],'销售ID':[1,2,1,2,3]})
print(df)
print(df.loc[:,['订单编号','客户姓名']])    # 中括号+逗号选取不连续的列
print(df.loc[:,'序号':'成交时间'])      # 直接切片选取连续的列
   序号 订单编号 客户姓名       成交时间  唯一识别码  销售ID
0   1   A1   张通 2018-08-08    101     1
1   2   A2   李谷 2018-08-09    102     2
2   3   A3   孙凤 2018-08-10    103     1
3   4   A4   赵恒 2018-08-11    104     2
4   5   A5   赵恒 2018-08-12    104     3
  订单编号 客户姓名
0   A1   张通
1   A2   李谷
2   A3   孙凤
3   A4   赵恒
4   A5   赵恒
   序号 订单编号 客户姓名       成交时间
0   1   A1   张通 2018-08-08
1   2   A2   李谷 2018-08-09
2   3   A3   孙凤 2018-08-10
3   4   A4   赵恒 2018-08-11
4   5   A5   赵恒 2018-08-12
2.5.2  行选择
In [82]:

# loc  根据行名称
df = pd.DataFrame({'序号':np.arange(1,6),'订单编号':['A1','A2','A3','A4','A5'],'客户姓名':['张通','李谷','孙凤','赵恒','赵恒'],'成交时间':pd.date_range('20180808',periods=5),'唯一识别码':[101,102,103,104,104],'销售ID':[1,2,1,2,3]})
df.index = ['一','二','三','四','五']
print(df)
print(df.loc['二'])
print(df.loc[['一','三']])
print(df.loc['一':'三'])
   序号 订单编号 客户姓名       成交时间  唯一识别码  销售ID
一   1   A1   张通 2018-08-08    101     1
二   2   A2   李谷 2018-08-09    102     2
三   3   A3   孙凤 2018-08-10    103     1
四   4   A4   赵恒 2018-08-11    104     2
五   5   A5   赵恒 2018-08-12    104     3
序号                         2
订单编号                      A2
客户姓名                      李谷
成交时间     2018-08-09 00:00:00
唯一识别码                    102
销售ID                       2
Name: 二, dtype: object
   序号 订单编号 客户姓名       成交时间  唯一识别码  销售ID
一   1   A1   张通 2018-08-08    101     1
三   3   A3   孙凤 2018-08-10    103     1
   序号 订单编号 客户姓名       成交时间  唯一识别码  销售ID
一   1   A1   张通 2018-08-08    101     1
二   2   A2   李谷 2018-08-09    102     2
三   3   A3   孙凤 2018-08-10    103     1
In [84]:

# iloc  根据行名称
df = pd.DataFrame({'序号':np.arange(1,6),'订单编号':['A1','A2','A3','A4','A5'],'客户姓名':['张通','李谷','孙凤','赵恒','赵恒'],'成交时间':pd.date_range('20180808',periods=5),'唯一识别码':[101,102,103,104,104],'销售ID':[1,2,1,2,3]})
df.index = ['一','二','三','四','五']
print(df)
print(df.iloc[1])
print(df.iloc[[1,3]])
print(df.iloc[1:4])
   序号 订单编号 客户姓名       成交时间  唯一识别码  销售ID
一   1   A1   张通 2018-08-08    101     1
二   2   A2   李谷 2018-08-09    102     2
三   3   A3   孙凤 2018-08-10    103     1
四   4   A4   赵恒 2018-08-11    104     2
五   5   A5   赵恒 2018-08-12    104     3
序号                         2
订单编号                      A2
客户姓名                      李谷
成交时间     2018-08-09 00:00:00
唯一识别码                    102
销售ID                       2
Name: 二, dtype: object
   序号 订单编号 客户姓名       成交时间  唯一识别码  销售ID
二   2   A2   李谷 2018-08-09    102     2
四   4   A4   赵恒 2018-08-11    104     2
   序号 订单编号 客户姓名       成交时间  唯一识别码  销售ID
二   2   A2   李谷 2018-08-09    102     2
三   3   A3   孙凤 2018-08-10    103     1
四   4   A4   赵恒 2018-08-11    104     2
In [92]:

# 根据条件筛选
df = pd.DataFrame({'序号':np.arange(1,6),'订单编号':['A1','A2','A3','A4','A5'],'客户姓名':['张通','李谷','孙凤','赵恒','赵恒'],'成交时间':pd.date_range('20180808',periods=5),'唯一识别码':[101,102,103,104,104],'销售ID':[1,2,1,2,3]})
df.index = ['一','二','三','四','五']
df['年龄'] = [31,45,23,201,202]
print(df)
print(df[df['年龄']<200])    # 单列筛选
print(df[(df['年龄']<200) & (df['唯一识别码']<103)])    #  多列筛选
   序号 订单编号 客户姓名       成交时间  唯一识别码  销售ID   年龄
一   1   A1   张通 2018-08-08    101     1   31
二   2   A2   李谷 2018-08-09    102     2   45
三   3   A3   孙凤 2018-08-10    103     1   23
四   4   A4   赵恒 2018-08-11    104     2  201
五   5   A5   赵恒 2018-08-12    104     3  202
   序号 订单编号 客户姓名       成交时间  唯一识别码  销售ID  年龄
一   1   A1   张通 2018-08-08    101     1  31
二   2   A2   李谷 2018-08-09    102     2  45
三   3   A3   孙凤 2018-08-10    103     1  23
   序号 订单编号 客户姓名       成交时间  唯一识别码  销售ID  年龄
一   1   A1   张通 2018-08-08    101     1  31
二   2   A2   李谷 2018-08-09    102     2  45
2.5.3  行列同时选择
In [100]:

df = pd.DataFrame({'序号':np.arange(1,6),'订单编号':['A1','A2','A3','A4','A5'],'客户姓名':['张通','李谷','孙凤','赵恒','赵恒'],'成交时间':pd.date_range('20180808',periods=5),'唯一识别码':[101,102,103,104,104],'销售ID':[1,2,1,2,3]})
df.index = ['一','二','三','四','五']
df['年龄'] = [31,45,23,201,202]
print(df)
df = pd.DataFrame({'序号':np.arange(1,6),'订单编号':['A1','A2','A3','A4','A5'],'客户姓名':['张通','李谷','孙凤','赵恒','赵恒'],'成交时间':pd.date_range('20180808',periods=5),'唯一识别码':[101,102,103,104,104],'销售ID':[1,2,1,2,3]})
df.index = ['一','二','三','四','五']
df['年龄'] = [31,45,23,201,202]
print(df)
print(df.loc[['一','三'],['序号','订单编号','客户姓名']])
print(df.loc['一':'三','序号':'客户姓名'])
print(df.iloc[[1,3],[1,3]])
print(df.iloc[1:3,1:3])
print(df[df['年龄']<200][['订单编号','年龄']] )
# print(df.ix[1:3,['订单编号','年龄']])   # df.ix已经弃用
   序号 订单编号 客户姓名       成交时间  唯一识别码  销售ID   年龄
一   1   A1   张通 2018-08-08    101     1   31
二   2   A2   李谷 2018-08-09    102     2   45
三   3   A3   孙凤 2018-08-10    103     1   23
四   4   A4   赵恒 2018-08-11    104     2  201
五   5   A5   赵恒 2018-08-12    104     3  202
   序号 订单编号 客户姓名
一   1   A1   张通
三   3   A3   孙凤
   序号 订单编号 客户姓名
一   1   A1   张通
二   2   A2   李谷
三   3   A3   孙凤
  订单编号       成交时间
二   A2 2018-08-09
四   A4 2018-08-11
  订单编号 客户姓名
二   A2   李谷
三   A3   孙凤
  订单编号  年龄
一   A1  31
二   A2  45
三   A3  23
2.6  数值操作
2.6.1  数值替换
In [5]:

df = pd.DataFrame({'序号':np.arange(1,6),'订单编号':['A1','A2','A3','A4','A5'],'客户姓名':['张通','李谷','孙凤','赵恒','赵恒'],'成交时间':pd.date_range('20180808',periods=5),'唯一识别码':[101,102,103,104,104],'销售ID':[1,2,1,2,3]})
df.index = ['一','二','三','四','五']
df['年龄'] = [31,45,23,201,202]
df
import pandas as pd
import numpy as np
df = pd.DataFrame({'序号':np.arange(1,6),'订单编号':['A1','A2','A3','A4','A5'],'客户姓名':['张通','李谷','孙凤','赵恒','赵恒'],'成交时间':pd.date_range('20180808',periods=5),'唯一识别码':[101,102,103,104,104],'销售ID':[1,2,1,2,3]})
df.index = ['一','二','三','四','五']
df['年龄'] = [31,45,23,201,202]
df
Out[5]:
序号    订单编号    客户姓名    成交时间    唯一识别码    销售ID    年龄
一    1    A1    张通    2018-08-08    101    1    31
二    2    A2    李谷    2018-08-09    102    2    45
三    3    A3    孙凤    2018-08-10    103    1    23
四    4    A4    赵恒    2018-08-11    104    2    201
五    5    A5    赵恒    2018-08-12    104    3    202
In [10]:

一对一替换
# 一对一替换
# replace(a,b)  将a替换为b
df['年龄'].replace(202,22,inplace=True)   # 列替换
df
Out[10]:
序号    订单编号    客户姓名    成交时间    唯一识别码    销售ID    年龄
一    1    A1    张通    2018-08-08    101    1    31
二    2    A2    李谷    2018-08-09    102    2    45
三    3    A3    孙凤    2018-08-10    103    1    23
四    4    A4    赵恒    2018-08-11    104    2    201
五    5    A5    赵恒    2018-08-12    104    3    22
In [13]:

# replace   整表替换
df.replace(2,np.nan,inplace=True)
df
Out[13]:
序号    订单编号    客户姓名    成交时间    唯一识别码    销售ID    年龄
一    1.0    A1    张通    2018-08-08    101    1.0    31
二    NaN    A2    李谷    2018-08-09    102    NaN    45
三    3.0    A3    孙凤    2018-08-10    103    1.0    23
四    4.0    A4    赵恒    2018-08-11    104    NaN    201
五    5.0    A5    赵恒    2018-08-12    104    3.0    22
In [16]:

e=True
#  多对一替换  replace([[a,b],c])  将a,b替换为c
df.replace([1,np.nan],10,inplace=True)
df
Out[16]:
序号    订单编号    客户姓名    成交时间    唯一识别码    销售ID    年龄
一    10.0    A1    张通    2018-08-08    101    10.0    31
二    10.0    A2    李谷    2018-08-09    102    10.0    45
三    3.0    A3    孙凤    2018-08-10    103    10.0    23
四    4.0    A4    赵恒    2018-08-11    104    10.0    201
五    5.0    A5    赵恒    2018-08-12    104    3.0    22
In [20]:

# 多对多替换  replace({'a':'A','b':'B'})  字典形式,将a替换为A,b替换为B
df.replace({10:1,201:21},inplace=True)
df
Out[20]:
序号    订单编号    客户姓名    成交时间    唯一识别码    销售ID    年龄
一    1.0    A1    张通    2018-08-08    101    1.0    31
二    1.0    A2    李谷    2018-08-09    102    1.0    45
三    3.0    A3    孙凤    2018-08-10    103    1.0    23
四    4.0    A4    赵恒    2018-08-11    104    1.0    21
五    5.0    A5    赵恒    2018-08-12    104    3.0    22
2.6.2  数值排序
In [21]:

# df.sor_values(by=['coll'],ascending=False)   按coll列降序排序  sscending=True 升序
df = pd.DataFrame({'序号':np.arange(1,6),'订单编号':['A1','A2','A3','A4','A5'],'客户姓名':['张通','李谷','孙凤','赵恒','赵恒'],'成交时间':pd.date_range('20180808',periods=5),'唯一识别码':[101,102,103,104,104],'销售ID':[1,2,1,2,3]})
df.index = ['一','二','三','四','五']
df['年龄'] = [31,45,23,201,202]
df
Out[21]:
序号    订单编号    客户姓名    成交时间    唯一识别码    销售ID    年龄
一    1    A1    张通    2018-08-08    101    1    31
二    2    A2    李谷    2018-08-09    102    2    45
三    3    A3    孙凤    2018-08-10    103    1    23
四    4    A4    赵恒    2018-08-11    104    2    201
五    5    A5    赵恒    2018-08-12    104    3    202
In [22]:

df.sort_values(by=['销售ID'],ascending=False)
df.sort_values(by=['销售ID'],ascending=False)
Out[22]:
序号    订单编号    客户姓名    成交时间    唯一识别码    销售ID    年龄
五    5    A5    赵恒    2018-08-12    104    3    202
二    2    A2    李谷    2018-08-09    102    2    45
四    4    A4    赵恒    2018-08-11    104    2    201
一    1    A1    张通    2018-08-08    101    1    31
三    3    A3    孙凤    2018-08-10    103    1    23
In [24]:

年龄
df.sort_values(by=['年龄'])
Out[24]:
序号    订单编号    客户姓名    成交时间    唯一识别码    销售ID    年龄
三    3    A3    孙凤    2018-08-10    103    1    23
一    1    A1    张通    2018-08-08    101    1    31
二    2    A2    李谷    2018-08-09    102    2    45
四    4    A4    赵恒    2018-08-11    104    2    201
五    5    A5    赵恒    2018-08-12    104    3    202
View Code

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!