
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