数据
小数数据
import openpyxl
import random
workbook = openpyxl.Workbook()
worksheet = workbook.create_sheet('小数数据' )
worksheet.append(['A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'I' , 'J' ])
for row in range (2 ,12 ):
for col in range (1 ,11 ):
worksheet.cell(row, col, random.random())
workbook.save("测试数据.xlsx" )
生成人名、年龄、性别、身份号码的CSV文件
from faker import Faker
import random
import openpyxl
workbook = openpyxl.open ("测试数据.xlsx" )
worksheet = workbook.create_sheet("人物" )
workbook.save("测试数据.xlsx" )
faker = Faker('zh_CN' )
worksheet.append(["姓名" , "年龄" , "性别" , "身份证号" , '出生日期' ])
for i in range (100 ):
nv = [
faker.name_female(),
str (random.randint(40 , 60 )),
"女" ,
faker.ssn(min_age=18 , max_age=90 ),
faker.date(),
]
nan = [
faker.name_male(),
str (random.randint(40 , 60 )),
"男" ,
faker.ssn(min_age=18 , max_age=90 ),
faker.date(),
]
worksheet.append(random.choice([nv, nan]))
workbook.save("测试数据.xlsx" )
产品销售表
from faker import Faker
import random
import openpyxl
workbook = openpyxl.open ("测试数据.xlsx" )
worksheet = workbook.create_sheet('产品销售表' )
worksheet.append(['销售员' ,'产品' ,'数量' ,'单价' ,'性别' ,'城市' ])
faker = Faker("zh_CN" )
cp = ['鼠标' ,'键盘' ,'DVD' ,'显示器' ,'发电机' ,'CPU' ]
xm = [faker.name_male() for _ in range (5 )]
sl = [10 ,20 ,31 ,33 ]
xb = ['男' ,'女' ]
cs = ['北京' ,'哈尔滨' ,'广州' ,'深圳' ,'杭州' ,'沈阳' ]
for i in range (100 ):
data = [
xm[random.randint(0 ,len (xm)-1 )],
cp[random.randint(0 ,len (cp)-1 )],
str (sl[(random.randint(0 ,len (sl)-1 ))]),
str (random.randint(100 ,1000 )),
xb[random.randint(0 ,len (xb)-1 )],
cs[random.randint(0 ,len (cs)-1 )]
]
worksheet.append(data)
workbook.save("测试数据.xlsx" )
地区销售表
import random
from faker import Faker
import openpyxl
workbook = openpyxl.open ("测试数据.xlsx" )
worksheet = workbook.create_sheet("地区销售表" )
cs = ['商品名称' ,"北京" , "哈尔滨" , "广州" , "深圳" , "杭州" , "沈阳" ]
cp = ["鼠标" , "键盘" , "DVD" , "显示器" , "发电机" , "CPU" ]
faker = Faker("zh_CN" )
worksheet.append(cs)
for i in cp:
data = [i]+[str (random.randint(1 , 100 )) for i in range (len (cs) - 1 )]
worksheet.append(data)
workbook.save("测试数据.xlsx" )
from collections import deque
my_list = deque([2 , 3 , 4 ])
my_list.appendleft(1 )
print (list (my_list))
[1, 2, 3, 4 ]
发货单表
import random
from faker import Faker
import openpyxl
workbook = openpyxl.open ("测试数据.xlsx" )
faker = Faker("zh_CN" )
worksheet = workbook.create_sheet("发货单表" )
worksheet.append(['客户名称' ,'联系电话' ,'快递地址' ])
for c in range (100 ):
worksheet.append([faker.name(), faker.phone_number(), ' ' .join([faker.province(),faker.city_name(),faker.street_address()])])
workbook.save("测试数据.xlsx" )
学生表
from random import randint
from faker import Faker
faker = Faker("zh_CN" )
import openpyxl
workbook = openpyxl.open ("测试数据.xlsx" )
cjb = workbook.create_sheet("成绩表" )
tyb = workbook.create_sheet("体育表" )
cjb.append("姓名,语文,数学,英语" .split("," ))
tyb.append("姓名,体育" .split("," ))
for i in range (10 ):
name = faker.name()
cjb.append([name,str (randint(0 ,100 )),str (randint(0 ,100 )),str (randint(0 ,100 ))])
tyb.append([name,str (randint(0 ,100 ))])
workbook.save("测试数据.xlsx" )
相同的两张表
from random import randint
import openpyxl
title = list ('ABCDEF' )
workbook = openpyxl.open ("测试数据.xlsx" )
sheet1 = workbook.create_sheet("concat1" )
sheet2 = workbook.create_sheet("concat2" )
sheet1.append(title)
sheet2.append(title)
for _ in range (10 ):
sheet1.append([randint(0 , 100 ) for i in range (6 )])
sheet2.append([randint(0 , 100 ) for i in range (6 )])
workbook.save("测试数据.xlsx" )
日期数据
from faker import Faker
import random
import time
faker = Faker("zh_CN" )
title = ['姓名' ,'年龄' ,'性别' ,'身份证号码' ,'地址' ]
for i in range (10 ):
nv = [
faker.name_female(),
str (random.randint(40 , 60 )),
"女" ,
faker.ssn(min_age=18 , max_age=90 ),
faker.address(),
]
nan = [
faker.name_male(),
str (random.randint(40 , 60 )),
"男" ,
faker.ssn(min_age=18 , max_age=90 ),
faker.address(),
]
data = [nan,nv]
time.sleep(1 )
数据结构
Pandas提供Series和DataFrame作为数组数据的存储框架,数据进入这两种框架后,我们就可以利用它们提供的强大处理方法进行处理。
名称
维度数据
描述
Series
1
带标签的一维同质数组
DataFrame
2
带标签的、大小可变的二维异构表格
文件中提供了关于Pandas库中两个核心数据结构的简要描述:
Series
索引
值
index1
1
index2
2
index3
3
...
...
DataFrame
-
key1
key2
...
index1
1
my
...
index2
2
name
...
index3
3
is
...
index4
4
tom
...
Series与DataFrame的区别
特性
Series
DataFrame
维度
一维
二维
数据类型
同质(所有元素类型相同)
异质(可以包含不同类型的列)
标签
索引标签
行索引和列索引
适用场景
适用于单一变量的时间序列数据
适用于表格数据,例如CSV文件
内存效率
高,因为只存储单一数据类型
相对较低,因为存储多种数据类型
操作
简单,如数值计算和统计分析
复杂,支持多列操作和数据透视表等
索引操作
直接通过索引标签访问数据
可以通过行索引和列索引访问数据
转换为另一种结构
可以通过增加索引列转换为DataFrame
可以提取单一列作为Series使用
Series 对象
创建Series对象
class Series (base.IndexOpsMixin, NDFrame)
参数(Parameters)
data :
类型:array-like, Iterable, dict, 或 scalar value(类似数组的对象、可迭代对象、字典或标量值)
默认值:None
描述:存储在 Series
中的数据。如果为 None,则创建一个空的 Series
。
index :
类型:array-like or Index (1d)(类似数组的对象或一维索引)
默认值:None
描述:用于 Series
的索引。如果为 None,则默认为 RangeIndex
(例如 0, 1, 2, ..., n)。如果数据是字典类型,并且索引为 None,则使用数据中的键作为索引。
dtype :
类型:Dtype 或 None
默认值:None
描述:输出 Series
的数据类型。如果未指定,将从 data
推断。Dtype
可以是字符串、numpy 数据类型或扩展数据类型。
name :
类型:Hashable(可哈希的)
默认值:None
描述:赋予 Series
的名称。
copy :
类型:bool 或 None
默认值:None
描述:是否复制输入数据。如果为 None,则根据上下文自动决定是否复制。只影响 Series
或 1d ndarray 输入。
fastpath :
类型:bool 或 lib.NoDefault
默认值:lib.no_default
描述:这是一个内部参数,用于优化 pandas
的内部处理。通常,用户不需要设置这个参数。lib.NoDefault
是一个特殊的值,表示该参数没有默认值,并且应该在内部处理中特别考虑。
import pandas as pd
import numpy as np
data = pd.Series([1 , 2 , 3 , 4 , 5 ])
data = pd.Series({"a" : 1 , "b" : 2 , "c" : 3 })
data = pd.Series(np.array([1 , 2 , 3 , 4 , 5 ]))
data = pd.Series(5 , index=["a" , "b" , "c" , "d" , "e" ])
data = pd.read_csv("series.csv" )
data = pd.Series(list (range (5 )))
data = pd.Series([1 , 2 , 3 ], index=pd.date_range("20240101" , periods=3 ))
print (data)
FileNotFoundError Traceback (most recent call last )
Cell In [1 ], line 17
14 data = pd.Series(5 , index= ["a", "b", "c", "d", "e"])
16 # 5 使用文件创建
19 # 6 使用函数创建
20 data = pd.Series(list(range (5 )))
File c:\Users\newte\AppData\Local \Programs\Python\Python312\Lib\site- packages\pandas\io\parsers\readers.py:1026 , in read_csv(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, date_format, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal , lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, encoding_errors, dialect, on_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options, dtype_backend)
1013 kwds_defaults = _refine_defaults_read(
1014 dialect,
1015 delimiter,
(...)
1022 dtype_backend= dtype_backend,
1023 )
1024 kwds.update(kwds_defaults)
- > 1026 return _read(filepath_or_buffer, kwds)
File c:\Users\newte\AppData\Local \Programs\Python\Python312\Lib\site- packages\pandas\io\parsers\readers.py:620 , in _read(filepath_or_buffer, kwds)
617 _validate_names(kwds.get("names", None ))
619 # Create the parser.
622 if chunksize or iterator:
623 return parser
File c:\Users\newte\AppData\Local \Programs\Python\Python312\Lib\site- packages\pandas\io\parsers\readers.py:1620 , in TextFileReader.__init__(self, f, engine, * * kwds)
1617 self.options["has_index_names"] = kwds["has_index_names"]
1619 self.handles: IOHandles | None = None
- > 1620 self._engine = self._make_engine(f, self.engine)
File c:\Users\newte\AppData\Local \Programs\Python\Python312\Lib\site- packages\pandas\io\parsers\readers.py:1880 , in TextFileReader._make_engine(self, f, engine)
1878 if "b" not in mode:
1879 mode + = "b"
- > 1880 self.handles = get_handle(
1881 f,
1882 mode,
1883 encoding= self.options.get("encoding", None ),
1884 compression= self.options.get("compression", None ),
1885 memory_map= self.options.get("memory_map", False ),
1886 is_text= is_text,
1887 errors= self.options.get("encoding_errors", "strict"),
1888 storage_options= self.options.get("storage_options", None ),
1889 )
1890 assert self.handles is not None
1891 f = self.handles.handle
File c:\Users\newte\AppData\Local \Programs\Python\Python312\Lib\site- packages\pandas\io\common.py:873 , in get_handle(path_or_buf, mode, encoding, compression, memory_map, is_text, errors, storage_options)
868 elif isinstance(handle, str):
869 # Check whether the filename is to be opened in binary mode.
870 # Binary mode does not support 'encoding' and 'newline' .
871 if ioargs.encoding and "b" not in ioargs.mode:
872 # Encoding
874 handle,
875 ioargs.mode,
876 encoding= ioargs.encoding,
877 errors= errors,
878 newline= "",
879 )
880 else :
881 # Binary mode
882 handle = open (handle, ioargs.mode)
FileNotFoundError: [Errno 2 ] No such file or directory: 'series.csv'
Series的索引
import pandas as pd
index = ['张三' ,'李四' ,'王五' ]
data = [-1 ,2 ,3 ]
s = pd.Series(data,index=index)
print (s)
print (type (s))
张三 -1
李四 2
王五 3
dtype: int64
<class
print ('位置索引' ,s.iloc[0 ])
print ("*" * 20 )
print ('标签索引' ,s['张三' ])
print ("*" * 20 )
print ("多标签索引" , s[["张三" ,"王五" ]])
print ("*" * 20 )
print ("切片索引" , s[1 :3 ])
print ("*" * 20 )
print ("布尔索引" , s[[True , False , True ]])
print ("*" * 20 )
print ("条件索引" , s[s > 0 ])
print ("*" * 20 )
print ("多条件索引" , s[(s < 0 ) & (s < 2 )])
print ("*" * 20 )
print ("索引重命名" , s.rename({"张三" :"张三1" }))
print ("*" * 20 )
print ('获取索引' ,s.index)
print ("*" * 20 )
print ('获取标签' ,s.keys())
print ("*" * 20 )
print ('获取值' ,s.values)
print ("*" * 20 )
print ('获取数据类型' ,s.dtypes)
位置索引 -1
**** **** **** **** ****
标签索引 -1
**** **** **** **** ****
多标签索引 张三 -1
王五 3
dtype: int64
**** **** **** **** ****
切片索引 李四 2
王五 3
dtype: int64
**** **** **** **** ****
布尔索引 张三 -1
王五 3
dtype: int64
**** **** **** **** ****
条件索引 李四 2
王五 3
dtype: int64
**** **** **** **** ****
多条件索引 张三 -1
dtype: int64
**** **** **** **** ****
索引重命名 张三1 -1
李四 2
王五 3
dtype: int64
**** **** **** **** ****
获取索引 Index(['张三', '李四', '王五'], dtype='object')
**** **** **** **** ****
获取标签 Index(['张三', '李四', '王五'], dtype='object')
**** **** **** **** ****
获取值 [-1 2 3]
**** **** **** **** ****
获取数据类型 int64
DataFrame 对象
创建DataFrame
import pandas as pd
import numpy as np
from sqlalchemy import create_engine
data = pd.DataFrame({"Column1" : [1 , 2 , 3 ],
"Column2" : ["A" , "B" , "C" ],
'Column3' :'f'
})
data = pd.DataFrame([[1 , "A" ], [2 , "B" ], [3 , "C" ]], columns=["Column1" , "Column2" ])
data = pd.DataFrame(np.array([[1 , "A" ], [2 , "B" ], [3 , "C" ]]))
series1 = pd.Series([1 , 2 , 3 ], name="Column1" )
series2 = pd.Series(["A" , "B" , "C" ], name="Column2" )
data = pd.DataFrame([series1, series2])
data = pd.read_excel("测试数据.xlsx" ,sheet_name="人物" )
df1 = pd.DataFrame({"A" : [1 , 2 ], "B" : [3 , 4 ]})
df2 = pd.DataFrame({"A" : [5 , 6 ], "B" : [7 , 8 ]})
data = pd.concat([df1, df2], ignore_index=True )
df1 = pd.DataFrame({"key" : ["A" , "B" ], "value" : [1 , 2 ]})
df2 = pd.DataFrame({"key" : ["B" , "C" ], "value" : [3 , 4 ]})
data = pd.merge(df1, df2, on="key" , how="inner" )
engine = create_engine("sqlite:///pandas.db" )
data = pd.read_sql_table("pandas" , engine)
data
index
0
1
2
3
4
5
6
7
8
9
10
0
0
昨天
07月25日
白天阴
0%
最高温度34℃
最低温度27℃
夜间小雨
85%
南风
3级
空气质量优
1
1
今天
07月26日
白天小雨
85%
最高温度32℃
最低温度26℃
夜间小雨
85%
东南风
1级
空气质量优
2
2
星期六
07月27日
白天小雨
80%
最高温度31℃
最低温度27℃
夜间小雨
85%
东南风
3级
空气质量优
3
3
星期日
07月28日
白天阴
0%
最高温度33℃
最低温度27℃
夜间阴
0%
南风
3级
空气质量优
4
4
星期一
07月29日
白天小雨
80%
最高温度34℃
最低温度27℃
夜间小雨
85%
南风
3级
空气质量优
5
5
星期二
07月30日
白天小雨
85%
最高温度32℃
最低温度25℃
夜间中雨
90%
西风
3级
空气质量优
6
6
星期三
07月31日
白天小雨
85%
最高温度31℃
最低温度26℃
夜间小雨
85%
东南风
1级
空气质量优
7
7
星期四
08月01日
白天中雨
90%
最高温度33℃
最低温度25℃
夜间小雨
85%
东南风
1级
空气质量优
8
8
星期五
08月02日
白天小雨
85%
最高温度31℃
最低温度25℃
夜间小雨
85%
西南风
1级
空气质量优
9
9
星期六
08月03日
白天小雨
85%
最高温度30℃
最低温度26℃
夜间晴
0%
南风
1级
空气质量优
10
10
星期日
08月04日
白天小雨
85%
最高温度31℃
最低温度26℃
夜间小雨
85%
东南风
1级
空气质量优
11
11
星期一
08月05日
白天小雨
85%
最高温度31℃
最低温度25℃
夜间小雨
85%
东南风
1级
空气质量优
12
12
星期二
08月06日
白天小雨
85%
最高温度31℃
最低温度26℃
夜间阴
0%
东南风
1级
空气质量优
13
13
星期三
08月07日
白天多云
0%
最高温度31℃
最低温度24℃
夜间晴
0%
东南风
1级
空气质量优
14
14
星期四
08月08日
白天小雨
85%
最高温度29℃
最低温度24℃
夜间多云
0%
东北风
1级
空气质量优
15
15
星期五
08月09日
白天小雨
85%
最高温度29℃
最低温度24℃
夜间阴
0%
东北风
1级
空气质量优
DataFrame的重要属性
data = pd.DataFrame(
{"Column1" : [1 , 2 , 3 ], "Column2" : ["A" , "B" , "C" ], "Column3" : "f" }
)
pd.set_option("display.unicode.east_asian_width" , True )
print (data)
print ("*" * 20 + "查看所有元素的值" + "*" * 20 )
print (data.values)
print ("*" * 20 + "所有元素的类型" + "*" * 20 )
print (data.dtypes)
print ("*" * 20 + "查看所有行名" + "*" * 20 )
print (data.index)
print ("*" * 20 + "查看所有列名" + "*" * 20 )
print (data.columns)
print ("*" * 20 + "查看数据集的维度" + "*" * 20 )
print (data.shape)
print ("*" * 20 + "行列转换" + "*" * 20 )
print (data.size )
print ("*" * 20 + "查看数据的大小" + "*" * 20 )
print (data.T)
print ("*" * 20 + "查看索引、数据类型、内存信息" +"*" * 20 )
print (data.info)
Column1 Column2 Column3
0 1 A f
1 2 B f
2 3 C f
**** **** **** **** **** 查看所有元素的值**** **** **** **** ****
[[1 'A' 'f']
[2 'B' 'f']
[3 'C' 'f']]
**** **** **** **** **** 所有元素的类型**** **** **** **** ****
Column1 int64
Column2 object
Column3 object
dtype: object
**** **** **** **** **** 查看所有行名**** **** **** **** ****
RangeIndex(start=0, stop=3, step=1)
**** **** **** **** **** 查看所有列名**** **** **** **** ****
Index(['Column1', 'Column2', 'Column3'], dtype='object')
**** **** **** **** **** 查看数据集的维度**** **** **** **** ****
(3, 3)
**** **** **** **** **** 行列转换**** **** **** **** ****
9
**** **** **** **** **** 行列转换**** **** **** **** ****
0 1 2
Column1 1 2 3
Column2 A B C
Column3 f f f
********************查看索引、数据类型、内存信息********************
<bound method DataFrame.info of Column1 Column2 Column3
0 1 A f
1 2 B f
2 3 C f>
DataFrame抽取数据
import pandas as pd
df = pd.read_excel("测试数据.xlsx" ,sheet_name="成绩表" )
df.set_index("姓名" ,inplace=True )
df
语文
数学
英语
姓名
朱楠
85
11
90
李鹏
0
69
68
党杰
3
44
94
王洁
92
73
8
韩健
86
93
72
范晶
26
16
9
张娜
36
45
5
林建
81
64
72
李秀荣
32
85
37
雷桂芝
29
26
87
标签抽取loc,at
抽取整行
print ('-' *20 +'提取单行数据' +'-' *20 )
print (df.loc["朱楠" ])
print ("-" * 20 + "提取多行数据" + "-" * 20 )
print (df.loc[["朱楠" , "王洁" ]])
print ("-" * 20 + "提取连续多行数据" + "-" * 20 )
print (df.loc["朱楠" :"王洁" ])
print ("-" * 20 + "提取单列数据" + "-" * 20 )
print (df.loc[:, '数学' ])
print ("-" * 20 + "提取多列数据" + "-" * 20 )
print (df.loc[:, ["数学" ,"英语" ]])
print ("-" * 20 + "提取连续列数据" + "-" * 20 )
print (df.loc[:, "语文" :"英语" ])
print ("-" * 20 + "提取多行多列数据" + "-" * 20 )
print (df.loc[["朱楠" , "王洁" ], ["语文" , "数学" ]])
print ("-" * 20 + "提取指定数据" + "-" * 20 )
print (df.loc["朱楠" , "语文" ])
print ("-" * 20 + "提取指区域数据" + "-" * 20 )
print (df.loc["朱楠" :"王洁" , "语文" :"数学" ])
print (df.loc[["朱楠" , "王洁" ], ["语文" , "数学" ]])
print ("-" * 20 + "提取单个数据" + "-" * 20 )
print (df.loc["朱楠" , "语文" ])
print ("-" * 20 + "按条件提取数据" + "-" * 20 )
print (df.loc[df['语文' ]> 50 ])
print ("-" * 20 + "按多条件提取数据" + "-" * 20 )
print (df.loc[(df["语文" ] > 50 ) & (df["数学" ] > 50 )])
语文 85
数学 11
英语 90
Name: 朱楠, dtype: int64
语文 数学 英语
姓名
朱楠 85 11 90
王洁 92 73 8
语文 数学 英语
姓名
朱楠 85 11 90
李鹏 0 69 68
党杰 3 44 94
王洁 92 73 8
姓名
朱楠 11
李鹏 69
党杰 44
王洁 73
韩健 93
范晶 16
张娜 45
林建 64
李秀荣 85
雷桂芝 26
Name: 数学, dtype: int64
数学 英语
姓名
朱楠 11 90
李鹏 69 68
党杰 44 94
王洁 73 8
韩健 93 72
范晶 16 9
张娜 45 5
林建 64 72
李秀荣 85 37
雷桂芝 26 87
语文 数学 英语
姓名
朱楠 85 11 90
李鹏 0 69 68
党杰 3 44 94
王洁 92 73 8
韩健 86 93 72
范晶 26 16 9
张娜 36 45 5
林建 81 64 72
李秀荣 32 85 37
雷桂芝 29 26 87
语文 数学
姓名
朱楠 85 11
王洁 92 73
85
语文 数学
姓名
朱楠 85 11
李鹏 0 69
党杰 3 44
王洁 92 73
语文 数学
姓名
朱楠 85 11
王洁 92 73
85
语文 数学 英语
姓名
朱楠 85 11 90
王洁 92 73 8
韩健 86 93 72
林建 81 64 72
语文 数学 英语
姓名
王洁 92 73 8
韩健 86 93 72
林建 81 64 72
提取单个值
a = df.at["党杰" ,"数学" ]
type (a)
numpy.int64
import pandas as pd
df = pd.DataFrame(
{"A" : [1 , 2 , 3 ], "B" : [4 , 5 , 6 ], "C" : [7 , 8 , 9 ]}, index=["row1" , "row2" , "row3" ]
)
print (df.at['row1' ,'B' ])
4
位置抽取iloc
print ("-" * 20 + "提取单行数据" + "-" * 20 )
print (df.iloc[0 ])
print ("-" * 20 + "提取多行数据" + "-" * 20 )
print (df.iloc[[0 ,1 ]])
print ("-" * 20 + "提取连续多行数据" + "-" * 20 )
print (df.iloc[0 :3 ])
print ("-" * 20 + "提取单列数据" + "-" * 20 )
print (df.iloc[:, 0 ])
print ("-" * 20 + "提取多列数据" + "-" * 20 )
print (df.iloc[:, [0 ,1 ]])
print ("-" * 20 + "提取连续列数据" + "-" * 20 )
print (df.iloc[:, 0 :3 ])
print ("-" * 20 + "提取多行多列数据" + "-" * 20 )
print (df.iloc[0 :3 , 0 :3 ])
print ("-" * 20 + "提取单个数据" + "-" * 20 )
print (df.iloc[0 , 0 ])
print ("-" * 20 + "提取多个连续数据" + "-" * 20 )
print (df.iloc[0 :3 , 0 :3 ])
print ("-" * 20 + "提取多个非连续数据" + "-" * 20 )
print (df.iloc[[0 ,2 ],[0 ,2 ]])
print ("-" * 20 + "按条件提取数据" + "-" * 20 )
语文 85
数学 11
英语 90
Name: 朱楠, dtype: int64
语文 数学 英语
姓名
朱楠 85 11 90
李鹏 0 69 68
语文 数学 英语
姓名
朱楠 85 11 90
李鹏 0 69 68
党杰 3 44 94
姓名
朱楠 85
李鹏 0
党杰 3
王洁 92
韩健 86
范晶 26
张娜 36
林建 81
李秀荣 32
雷桂芝 29
Name: 语文, dtype: int64
语文 数学
姓名
朱楠 85 11
李鹏 0 69
党杰 3 44
王洁 92 73
韩健 86 93
范晶 26 16
张娜 36 45
林建 81 64
李秀荣 32 85
雷桂芝 29 26
语文 数学 英语
姓名
朱楠 85 11 90
李鹏 0 69 68
党杰 3 44 94
王洁 92 73 8
韩健 86 93 72
范晶 26 16 9
张娜 36 45 5
林建 81 64 72
李秀荣 32 85 37
雷桂芝 29 26 87
语文 数学 英语
姓名
朱楠 85 11 90
李鹏 0 69 68
党杰 3 44 94
85
语文 数学 英语
姓名
朱楠 85 11 90
李鹏 0 69 68
党杰 3 44 94
语文 英语
姓名
朱楠 85 90
党杰 3 94
抽取列数据
print ("-" * 20 + "提取单列数据" + "-" * 20 )
print (df["数学" ])
print ("-" * 20 + "提取多列数据" + "-" * 20 )
print (df[["数学" , "语文" ]])
print ("-" * 20 + "提取连续列数据" + "-" * 20 )
print (df.loc[:,'语文' :'英语' ])
姓名
朱楠 11
李鹏 69
党杰 44
王洁 73
韩健 93
范晶 16
张娜 45
林建 64
李秀荣 85
雷桂芝 26
Name: 数学, dtype: int64
数学 语文
姓名
朱楠 11 85
李鹏 69 0
党杰 44 3
王洁 73 92
韩健 93 86
范晶 16 26
张娜 45 36
林建 64 81
李秀荣 85 32
雷桂芝 26 29
语文 数学 英语
姓名
朱楠 85 11 90
李鹏 0 69 68
党杰 3 44 94
王洁 92 73 8
韩健 86 93 72
范晶 26 16 9
张娜 36 45 5
林建 81 64 72
李秀荣 32 85 37
雷桂芝 29 26 87
数据的增删改
import pandas as pd
df = pd.read_excel("测试数据.xlsx" , sheet_name="成绩表" )
print (df.columns,df.index)
Index(['姓名' , '语文' , '数学' , '英语' ], dtype= 'object' ) RangeIndex(start = 0 , stop= 10 , step= 1 )
DataFrame增加数据
按列增加
print ("-" * 20 + "直接赋值方式" + "-" * 20 )
df["政治" ] = [90 , 80 , 70 , 34 , 23 , 65 , 76 , 87 , 58 , 10 ]
print (df)
print ("-" * 20 + "loc方式" + "-" * 20 )
df.loc[:, "化学" ] = [60 , 80 , 70 , 34 , 23 , 65 , 76 , 87 , 58 , 10 ]
print (df)
print ("-" * 20 + "指定位置方式" + "-" * 20 )
df.insert(2 , '物理' , [90 , 80 , 70 ,34 ,23 ,65 ,76 ,87 ,58 ,10 ])
df
姓名 语文 数学 英语 政治
0 朱楠 85 11 90 90
1 李鹏 0 69 68 80
2 党杰 3 44 94 70
3 王洁 92 73 8 34
4 韩健 86 93 72 23
5 范晶 26 16 9 65
6 张娜 36 45 5 76
7 林建 81 64 72 87
8 李秀荣 32 85 37 58
9 雷桂芝 29 26 87 10
姓名 语文 数学 英语 政治 化学
0 朱楠 85 11 90 90 60
1 李鹏 0 69 68 80 80
2 党杰 3 44 94 70 70
3 王洁 92 73 8 34 34
4 韩健 86 93 72 23 23
5 范晶 26 16 9 65 65
6 张娜 36 45 5 76 76
7 林建 81 64 72 87 87
8 李秀荣 32 85 37 58 58
9 雷桂芝 29 26 87 10 10
姓名
语文
物理
数学
英语
政治
化学
0
朱楠
85
90
11
90
90
60
1
李鹏
0
80
69
68
80
80
2
党杰
3
70
44
94
70
70
3
王洁
92
34
73
8
34
34
4
韩健
86
23
93
72
23
23
5
范晶
26
65
16
9
65
65
6
张娜
36
76
45
5
76
76
7
林建
81
87
64
72
87
87
8
李秀荣
32
58
85
37
58
58
9
雷桂芝
29
10
26
87
10
10
按行增加
import pandas as pd
df = pd.read_excel("测试数据.xlsx" , sheet_name="成绩表" ,index_col=0 )
new_df = pd.DataFrame(
data={"语文" : [45 , 56 , 67 ], "数学" : [65 , 45 , 67 ], "英语" : [200 , 50 , 67 ]},
index=["张丽" , "李广" , "王琦" ],
)
print ("-" * 20 + "loc方式" + "-" * 20 )
df.loc['陈六' ] = [10 ,20 ,30 ]
print ("-" * 20 + "concat方式" + "-" * 20 )
df = pd.concat([df,new_df])
df
--------------------loc 方式--------------------
--------------------concat 方式--------------------
语文
数学
英语
朱楠
85
11
90
李鹏
0
69
68
党杰
3
44
94
王洁
92
73
8
韩健
86
93
72
范晶
26
16
9
张娜
36
45
5
林建
81
64
72
李秀荣
32
85
37
雷桂芝
29
26
87
陈六
10
20
30
张丽
45
65
200
李广
56
45
50
王琦
67
67
67
DataFrame修改数据
import pandas as pd
df = pd.read_excel("测试数据.xlsx" , sheet_name="成绩表" , index_col=0 )
df
语文
数学
英语
姓名
朱楠
85
11
90
李鹏
0
69
68
党杰
3
44
94
王洁
92
73
8
韩健
86
93
72
范晶
26
16
9
张娜
36
45
5
林建
81
64
72
李秀荣
32
85
37
雷桂芝
29
26
87
修改列标题
df.columns = ['a' ,'b' ,'c' ]
print (df)
df.rename(columns={'a' :'语文' ,'b' :'数学' ,'c' :'英语' },inplace=True )
print (df)
a b c
姓名
朱楠 85 11 90
李鹏 0 69 68
党杰 3 44 94
王洁 92 73 8
韩健 86 93 72
范晶 26 16 9
张娜 36 45 5
林建 81 64 72
李秀荣 32 85 37
雷桂芝 29 26 87
语文 数学 英语
姓名
朱楠 85 11 90
李鹏 0 69 68
党杰 3 44 94
王洁 92 73 8
韩健 86 93 72
范晶 26 16 9
张娜 36 45 5
林建 81 64 72
李秀荣 32 85 37
雷桂芝 29 26 87
修改列标题
df.index = list ('1234567891' )
print (df)
df.rename({'1' :'张三' ,'2' :'李四' ,'3' :'王五' },inplace=True ,axis=0 )
print (df)
语文 数学 英语
1 85 11 90
2 0 69 68
3 3 44 94
4 92 73 8
5 86 93 72
6 26 16 9
7 36 45 5
8 81 64 72
9 32 85 37
1 29 26 87
语文 数学 英语
张三 85 11 90
李四 0 69 68
王五 3 44 94
4 92 73 8
5 86 93 72
6 26 16 9
7 36 45 5
8 81 64 72
9 32 85 37
张三 29 26 87
修改数据
df.loc["张三" ] = [100 , 100 , 120 ]
df.iloc[0 , :] = [45 , 65 , 200 ]
df
语文
数学
英语
张三
45
65
200
李四
0
69
68
王五
3
44
94
4
92
73
8
5
86
93
72
6
26
16
9
7
36
45
5
8
81
64
72
9
32
85
37
张三
100
100
120
df.loc[:,'数学' ] = [80 ,90 ,100 ,101 ,102 ,103 ,104 ,105 ,106 ,104 ]
df.iloc[:, 1 ] = [65 , 45 , 67 , 101 , 102 , 103 , 104 , 105 , 106 , 104 ]
df
语文
数学
英语
张三
45
65
200
李四
0
45
68
王五
3
67
94
4
92
101
8
5
86
102
72
6
26
103
9
7
36
104
5
8
81
105
72
9
32
106
37
张三
100
104
120
df.loc["张三" , "英语" ] = 90
df.iloc[1 ,2 ] = 50
df
语文
数学
英语
张三
45
65
90
李四
0
45
50
王五
3
67
94
4
92
101
8
5
86
102
72
6
26
103
9
7
36
104
5
8
81
105
72
9
32
106
37
张三
100
104
90
删除数据
import pandas as pd
df = pd.read_excel("测试数据.xlsx" , sheet_name="成绩表" , index_col=0 )
df
语文
数学
英语
姓名
朱楠
85
11
90
李鹏
0
69
68
党杰
3
44
94
王洁
92
73
8
韩健
86
93
72
范晶
26
16
9
张娜
36
45
5
林建
81
64
72
李秀荣
32
85
37
雷桂芝
29
26
87
df = pd.read_excel("测试数据.xlsx" , sheet_name="成绩表" , index_col=0 )
df.drop(df[df["数学" ] < 60 ].index, inplace=True )
df
语文
数学
英语
姓名
李鹏
0
69
68
王洁
92
73
8
韩健
86
93
72
林建
81
64
72
李秀荣
32
85
37
查看数据
import pandas as pd
df = pd.read_excel("测试数据.xlsx" , sheet_name="缺失数据" , index_col=0 ,header=0 )
s = df["数学" ]
查看顶部,底部与随机数据
print (df.head(2 ))
print (df.tail(2 ))
print (df.sample(2 ))
语文 数学 英语
姓名
朱楠 85.0 11.0 90.0
李鹏 0.0 69.0 68.0
语文 数学 英语
姓名
李秀荣 32.0 NaN 37.0
雷桂芝 29.0 26.0 87.0
语文 数学 英语
姓名
韩健 86.0 93.0 72.0
范晶 26.0 16.0 9.0
查看行列索引
print (df.index)
print (df.columns)
print (s.keys())
print (df.axes)
print (s.name)
Index (['朱楠' , '李鹏' , '党杰' , '王洁' , '韩健' , '范晶' , '张娜' , '林建' , '李秀荣' , '雷桂芝' ], dtype='object' , name ='姓名' )
Index (['语文' , '数学' , '英语' ], dtype='object' )
Index (['朱楠' , '李鹏' , '党杰' , '王洁' , '韩健' , '范晶' , '张娜' , '林建' , '李秀荣' , '雷桂芝' ], dtype='object' , name ='姓名' )
[Index (['朱楠' , '李鹏' , '党杰' , '王洁' , '韩健' , '范晶' , '张娜' , '林建' , '李秀荣' , '雷桂芝' ], dtype='object' , name ='姓名' ), Index (['语文' , '数学' , '英语' ], dtype='object' )]
数学
查看数据形状
print (df.shape)
print (df.ndim)
(10 , 3 )
2
查看基础信息
df.info()
< class 'pandas.core.frame.DataFrame' >
Index: 10 entries, 朱楠 to 雷桂芝
Data columns (total 3 columns):
# Column Non- Null Count Dtype
0 语文 9 non- null float64
1 数学 9 non- null float64
2 英语 9 non- null float64
dtypes: float64(3 )
memory usage: 620.0 + bytes
数据类型
df.dtypes
语文 float64
数学 float64
英语 float64
dtype: object
查看值
print (df.values)
print ("*" *100 )
print (df.__array__())
[[85. 11. 90.]
[ 0. 69. 68.]
[ 3. 44. 94.]
[nan 73. 8.]
[86. 93. 72.]
[26. 16. 9.]
[36. 45. nan]
[81. 64. 72.]
[32. nan 37.]
[29. 26. 87.]]
**** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
[[85. 11. 90.]
[ 0. 69. 68.]
[ 3. 44. 94.]
[nan 73. 8.]
[86. 93. 72.]
[26. 16. 9.]
[36. 45. nan]
[81. 64. 72.]
[32. nan 37.]
[29. 26. 87.]]
判断
df.empty
False
查看数据的数量
print (df.size )
print (len (df))
30
10
查看缺失值
print (df.isnull())
print (df.notnull())
print (s.hasnans)
print (df.isna())
语文 数学 英语
姓名
朱楠 False False False
李鹏 False False False
党杰 False False False
王洁 True False False
韩健 False False False
范晶 False False False
张娜 False False True
林建 False False False
李秀荣 False True False
雷桂芝 False False False
语文 数学 英语
姓名
朱楠 True True True
李鹏 True True True
党杰 True True True
王洁 False True True
韩健 True True True
范晶 True True True
张娜 True True False
林建 True True True
李秀荣 True False True
雷桂芝 True True True
True
语文 数学 英语
姓名
朱楠 False False False
李鹏 False False False
党杰 False False False
王洁 True False False
韩健 False False False
范晶 False False False
张娜 False False True
林建 False False False
李秀荣 False True False
雷桂芝 False False False
数据选择
数据清洗
df = pd.read_excel("测试数据.xlsx" , sheet_name="缺失数据" , index_col=0 )
查看缺失值
df.info()
"""
Index: 10
0 语文 9 non-null float64
1 数学 9 non-null float64
2 英语 9 non-null float64
"""
< class 'pandas.core.frame.DataFrame' >
Index: 10 entries, 朱楠 to 雷桂芝
Data columns (total 3 columns):
# Column Non- Null Count Dtype
0 语文 9 non- null float64
1 数学 9 non- null float64
2 英语 9 non- null float64
dtypes: float64(3 )
memory usage: 320.0 + bytes
df.isna
"""
王洁 NaN 73.0 8.0
张娜 36.0 45.0 NaN
李秀荣 32.0 NaN 37.0
"""
<bound method DataFrame. isna of 语文 数学 英语
姓名
朱楠 85.0 11.0 90.0
李鹏 0.0 69.0 68.0
党杰 3.0 44.0 94.0
王洁 NaN 73.0 8.0
韩健 86.0 93.0 72.0
范晶 26.0 16.0 9.0
张娜 36.0 45.0 NaN
林建 81.0 64.0 72.0
李秀荣 32.0 NaN 37.0
雷桂芝 29.0 26.0 87.0 >
print (df.isnull())
print (df.isna())
"""
王洁 True False False
张娜 False False True
李秀荣 False True False
"""
语文 数学 英语
姓名
朱楠 False False False
李鹏 False False False
党杰 False False False
王洁 True False False
韩健 False False False
范晶 False False False
张娜 False False True
林建 False False False
李秀荣 False True False
雷桂芝 False False False
语文 数学 英语
姓名
朱楠 False False False
李鹏 False False False
党杰 False False False
王洁 True False False
韩健 False False False
范晶 False False False
张娜 False False True
林建 False False False
李秀荣 False True False
雷桂芝 False False False
'\n王洁 True False False\n张娜 False False True\n李秀荣 False True False\n'
print (df.notnull())
"""
王洁 False True True
张娜 True True False
雷桂芝 True True True
"""
语文 数学 英语
姓名
朱楠 True True True
李鹏 True True True
党杰 True True True
王洁 False True True
韩健 True True True
范晶 True True True
张娜 True True False
林建 True True True
李秀荣 True False True
雷桂芝 True True True
print (df['语文' ].hasnans)
df['语文' ].isnull()
df["语文" ].notna()
df["语文" ].notnull()
True
姓名
朱楠 True
李鹏 True
党杰 True
王洁 False
韩健 True
范晶 True
张娜 True
林建 True
李秀荣 True
雷桂芝 True
Name: 语文, dtype: bool
缺失值统计
df.isnull().sum ()
语文 1
数学 1
英语 1
dtype: int64
df.isnull().sum (1 )
姓名
朱楠 0
李鹏 0
党杰 0
王洁 1
韩健 0
范晶 0
张娜 1
林建 0
李秀荣 1
雷桂芝 0
dtype: int64
缺失值筛选
df.loc[df.isna().any (axis=1 )]
语文
数学
英语
姓名
王洁
NaN
73.0
8.0
张娜
36.0
45.0
NaN
李秀荣
32.0
NaN
37.0
df.loc[:, df.isna().any (axis=0 )]
语文
数学
英语
姓名
朱楠
85.0
11.0
90.0
李鹏
0.0
69.0
68.0
党杰
3.0
44.0
94.0
王洁
NaN
73.0
8.0
韩健
86.0
93.0
72.0
范晶
26.0
16.0
9.0
张娜
36.0
45.0
NaN
林建
81.0
64.0
72.0
李秀荣
32.0
NaN
37.0
雷桂芝
29.0
26.0
87.0
df.loc[~(df.isna().any (axis=1 ))]
语文
数学
英语
姓名
朱楠
85.0
11.0
90.0
李鹏
0.0
69.0
68.0
党杰
3.0
44.0
94.0
韩健
86.0
93.0
72.0
范晶
26.0
16.0
9.0
林建
81.0
64.0
72.0
雷桂芝
29.0
26.0
87.0
df.loc[:, ~(df.isna().any ())]
姓名
朱楠
李鹏
党杰
王洁
韩健
范晶
张娜
林建
李秀荣
雷桂芝
s = pd.Series([1 , 2 , None , 4 ], dtype="Int64" )
s
0 1
1 2
2 <NA>
3 4
dtype: Int64
缺失值处理方式
删除缺失值的行
print (df)
df = df.dropna()
print (df)
语文 数学 英语
姓名
朱楠 85.0 11.0 90.0
李鹏 0.0 69.0 68.0
党杰 3.0 44.0 94.0
王洁 NaN 73.0 8.0
韩健 86.0 93.0 72.0
范晶 26.0 16.0 9.0
张娜 36.0 45.0 NaN
林建 81.0 64.0 72.0
李秀荣 32.0 NaN 37.0
雷桂芝 29.0 26.0 87.0
语文 数学 英语
姓名
朱楠 85.0 11.0 90.0
李鹏 0.0 69.0 68.0
党杰 3.0 44.0 94.0
韩健 86.0 93.0 72.0
范晶 26.0 16.0 9.0
林建 81.0 64.0 72.0
雷桂芝 29.0 26.0 87.0
df = pd.read_excel("pandas.xlsx" )
df[df["空气质量优" ].notnull()]
昨天
07月25日
白天阴
0%
最高温度34℃
最低温度27℃
夜间小雨
85%
南风
3级
空气质量优
0
今天
07月26日
白天小雨
85%
最高温度32℃
最低温度26℃
夜间小雨
85%
东南风
1级
空气质量优
1
星期六
07月27日
白天小雨
80%
最高温度31℃
最低温度27℃
夜间小雨
85%
东南风
3级
空气质量优
2
星期日
07月28日
NaN
0%
最高温度33℃
最低温度27℃
夜间阴
0%
南风
3级
空气质量优
3
星期一
07月29日
白天小雨
80%
最高温度34℃
最低温度27℃
夜间小雨
85%
南风
3级
空气质量优
4
星期二
07月30日
白天小雨
85%
最高温度32℃
最低温度25℃
夜间中雨
90%
西风
3级
空气质量优
5
星期三
07月31日
白天小雨
NaN
最高温度31℃
最低温度26℃
夜间小雨
NaN
东南风
1级
空气质量优
6
星期四
08月01日
白天中雨
90%
最高温度33℃
最低温度25℃
夜间小雨
85%
东南风
1级
空气质量优
8
星期六
08月03日
白天小雨
85%
最高温度30℃
最低温度26℃
夜间晴
0%
南风
1级
空气质量优
9
星期日
08月04日
白天小雨
85%
最高温度31℃
最低温度26℃
夜间小雨
85%
东南风
1级
空气质量优
10
星期一
08月05日
白天小雨
85%
最高温度31℃
最低温度25℃
夜间小雨
85%
东南风
1级
空气质量优
11
星期二
08月06日
白天小雨
85%
NaN
最低温度26℃
夜间阴
0%
东南风
1级
空气质量优
12
星期三
08月07日
白天多云
0%
最高温度31℃
最低温度24℃
夜间晴
0%
东南风
1级
空气质量优
13
星期四
08月08日
白天小雨
85%
最高温度29℃
最低温度24℃
夜间多云
0%
东北风
1级
空气质量优
14
星期五
08月09日
白天小雨
85%
最高温度29℃
最低温度24℃
夜间阴
0%
东北风
1级
空气质量优
15
星期五
08月09日
白天小雨
85%
最高温度29℃
最低温度24℃
夜间阴
0%
东北风
1级
空气质量优
16
星期日
07月28日
NaN
0%
最高温度33℃
最低温度27℃
夜间阴
0%
南风
3级
空气质量优
df["空气质量优" ].fillna("空气质量优" )
0 空气质量优
1 空气质量优
2 空气质量优
3 空气质量优
4 空气质量优
5 空气质量优
6 空气质量优
7 空气质量优
8 空气质量优
9 空气质量优
10 空气质量优
11 空气质量优
12 空气质量优
13 空气质量优
14 空气质量优
15 空气质量优
16 空气质量优
Name: 空气质量优, dtype: object
重复值处理
df = pd.read_excel("pandas.xlsx" )
df.duplicated()
0 False
1 False
2 False
3 False
4 False
5 False
6 False
7 False
8 False
9 False
10 False
11 False
12 False
13 False
14 False
15 True
16 True
dtype: bool
df.drop_duplicates(inplace=True )
df
昨天
07月25日
白天阴
0%
最高温度34℃
最低温度27℃
夜间小雨
85%
南风
3级
空气质量优
0
今天
07月26日
白天小雨
85%
最高温度32℃
最低温度26℃
夜间小雨
85%
东南风
1级
空气质量优
1
星期六
07月27日
白天小雨
80%
最高温度31℃
最低温度27℃
夜间小雨
85%
东南风
3级
空气质量优
2
星期日
07月28日
NaN
0%
最高温度33℃
最低温度27℃
夜间阴
0%
南风
3级
空气质量优
3
星期一
07月29日
白天小雨
80%
最高温度34℃
最低温度27℃
夜间小雨
85%
南风
3级
空气质量优
4
星期二
07月30日
白天小雨
85%
最高温度32℃
最低温度25℃
夜间中雨
90%
西风
3级
空气质量优
5
星期三
07月31日
白天小雨
NaN
最高温度31℃
最低温度26℃
夜间小雨
NaN
东南风
1级
空气质量优
6
星期四
08月01日
白天中雨
90%
最高温度33℃
最低温度25℃
夜间小雨
85%
东南风
1级
空气质量优
7
星期五
08月02日
白天小雨
85%
最高温度31℃
最低温度25℃
夜间小雨
85%
西南风
1级
NaN
8
星期六
08月03日
白天小雨
85%
最高温度30℃
最低温度26℃
夜间晴
0%
南风
1级
空气质量优
9
星期日
08月04日
白天小雨
85%
最高温度31℃
最低温度26℃
夜间小雨
85%
东南风
1级
空气质量优
10
星期一
08月05日
白天小雨
85%
最高温度31℃
最低温度25℃
夜间小雨
85%
东南风
1级
空气质量优
11
星期二
08月06日
白天小雨
85%
NaN
最低温度26℃
夜间阴
0%
东南风
1级
空气质量优
12
星期三
08月07日
白天多云
0%
最高温度31℃
最低温度24℃
夜间晴
0%
东南风
1级
空气质量优
13
星期四
08月08日
白天小雨
85%
最高温度29℃
最低温度24℃
夜间多云
0%
东北风
1级
空气质量优
14
星期五
08月09日
白天小雨
85%
最高温度29℃
最低温度24℃
夜间阴
0%
东北风
1级
空气质量优
df = pd.read_excel("pandas.xlsx" )
df = df.drop_duplicates(["空气质量优" ])
df
昨天
07月25日
白天阴
0%
最高温度34℃
最低温度27℃
夜间小雨
85%
南风
3级
空气质量优
0
今天
07月26日
白天小雨
85%
最高温度32℃
最低温度26℃
夜间小雨
85%
东南风
1级
空气质量优
7
星期五
08月02日
白天小雨
85%
最高温度31℃
最低温度25℃
夜间小雨
85%
西南风
1级
NaN
df = pd.read_excel("pandas.xlsx" )
df = df.drop_duplicates(["空气质量优" ],keep='last' )
df
昨天
07月25日
白天阴
0%
最高温度34℃
最低温度27℃
夜间小雨
85%
南风
3级
空气质量优
7
星期五
08月02日
白天小雨
85%
最高温度31℃
最低温度25℃
夜间小雨
85%
西南风
1级
NaN
16
星期日
07月28日
NaN
0%
最高温度33℃
最低温度27℃
夜间阴
0%
南风
3级
空气质量优
df = pd.read_excel("pandas.xlsx" )
df1 = df.drop_duplicates(["空气质量优" ], inplace=False )
print (df,df1)
昨天 07 月25 日 白天阴 0
0 今天 07 月26 日 白天小雨 85
1 星期六 07 月27 日 白天小雨 80
2 星期日 07 月28 日 NaN 0
3 星期一 07 月29 日 白天小雨 80
4 星期二 07 月30 日 白天小雨 85
5 星期三 07 月31 日 白天小雨 NaN 最高温度31 ℃ 最低温度26 ℃ 夜间小雨
6 星期四 08 月01 日 白天中雨 90
7 星期五 08 月02 日 白天小雨 85
8 星期六 08 月03 日 白天小雨 85
9 星期日 08 月04 日 白天小雨 85
10 星期一 08 月05 日 白天小雨 85
11 星期二 08 月06 日 白天小雨 85
12 星期三 08 月07 日 白天多云 0
13 星期四 08 月08 日 白天小雨 85
14 星期五 08 月09 日 白天小雨 85
15 星期五 08 月09 日 白天小雨 85
16 星期日 07 月28 日 NaN 0
85
0 85
1 85
2 0
3 85
4 90
5 NaN 东南风 1 级 空气质量优
6 85
7 85
8 0
9 85
10 85
11 0
12 0
13 0
14 0
15 0
16 0
0 今天 07 月26 日 白天小雨 85
7 星期五 08 月02 日 白天小雨 85
85
0 85
7 85
异常值的检测与处理
异常值的检测方法
索引
索引类型
pd.RangeIndex(1 , 100 , 2 )
RangeIndex (start=1 , stop=100 , step=2 )
设置索引
Series对象
建立索引
构造时设置索引
import pandas as pd
s= pd.Series([1 ,2 ,3 ,4 ,5 ],index=['a' ,'b' ,'c' ,'d' ,'e' ])
s.index
Index (['a' , 'b' , 'c' , 'd' , 'e' ], dtype='object' )
创建后设置索引
import pandas as pd
s = pd.Series([1 , 2 , 3 , 4 , 5 ])
print (s.index)
s.index = list ('abcde' )
print (s.index)
s.index = pd.Index(list ('fghij' ))
print (s.index)
s = pd.Series([1 , 2 , 3 , 4 , 5 ])
s= s.reindex(range (0 ,8 ))
print (s.index)
s = pd.Series([1 , 2 , 3 , 4 , 5 ])
s = s.reindex(range (0 , 8 ), fill_value=0 )
s = pd.Series([1 , 2 , 3 , 4 , 5 ])
s = s.reindex(range (0 ,8 ),method='ffill' )
s = pd.Series([1 , 2 , 3 , 4 , 5 ])
print (s)
RangeIndex(start = 0 , stop= 5 , step= 1 )
Index(['a' , 'b' , 'c' , 'd' , 'e' ], dtype= 'object' )
Index(['f' , 'g' , 'h' , 'i' , 'j' ], dtype= 'object' )
RangeIndex(start = 0 , stop= 8 , step= 1 )
0 1
1 2
2 3
3 4
4 5
dtype: int64
重置索引
import pandas as pd
data = ['tom' ,'jack' ,'lis' ]
index = ['a' ,'b' ,'c' ]
s = pd.Series(data,index=index)
s = s.reset_index()
s.index
s
index
0
0
a
tom
1
b
jack
2
c
lis
DataFrame对象
建立索引
读取文件时指定索引
import pandas as pd
df = pd.read_excel("测试数据.xlsx" ,sheet_name="成绩表" ,index_col=0 ,header=0 )
print (df.index)
print (df.columns)
Index (['朱楠' , '李鹏' , '党杰' , '王洁' , '韩健' , '范晶' , '张娜' , '林建' , '李秀荣' , '雷桂芝' ], dtype='object' , name ='姓名' )
Index (['语文' , '数学' , '英语' ], dtype='object' )
创建后设置索引
df = pd.read_excel("测试数据.xlsx" , sheet_name="成绩表" , header=None )
df1 = df.copy()
print (df1.index)
print (df1.columns)
df1.index = ['姓名' ,
"朱楠" ,
"李鹏" ,
"党杰" ,
"王洁" ,
"韩健" ,
"范晶" ,
"张娜" ,
"林建" ,
"李秀荣" ,
"雷桂芝" ,
]
df1.columns = ['姓名' ,"语文" , "数学" , "英语" ]
df2 = df.copy()
df2.set_index([0 ,1 ], inplace=True )
df2
df3 = df.copy()
df3.reindex(
index=[
"朱楠" ,
"李鹏" ,
"党杰" ,
"王洁" ,
"韩健" ,
"范晶" ,
"张娜" ,
"林建" ,
"李秀荣" ,
"雷桂芝" ,
],
columns=["语文" , "数学" , "英语" ],
fill_value=0 ,
)
df3.set_index(keys=0 , inplace=True )
df3
RangeIndex (start=0 , stop=11 , step=1 )
Index ([0 , 1 , 2 , 3 ], dtype='int64')
1
2
3
0
姓名
语文
数学
英语
朱楠
85
11
90
李鹏
0
69
68
党杰
3
44
94
王洁
92
73
8
韩健
86
93
72
范晶
26
16
9
张娜
36
45
5
林建
81
64
72
李秀荣
32
85
37
雷桂芝
29
26
87
df = pd.read_excel("测试数据.xlsx" , sheet_name="天气" )
df.set_index("昨天" )
07月25日
白天阴
0%
最高温度34℃
最低温度27℃
夜间小雨
85%
南风
3级
空气质量优
昨天
今天
07月26日
白天小雨
85%
最高温度32℃
最低温度26℃
夜间小雨
85%
东南风
1级
空气质量优
星期六
07月27日
白天小雨
80%
最高温度31℃
最低温度27℃
夜间小雨
85%
东南风
3级
空气质量优
星期日
07月28日
NaN
0%
最高温度33℃
最低温度27℃
夜间阴
0%
南风
3级
空气质量优
星期一
07月29日
白天小雨
80%
最高温度34℃
最低温度27℃
夜间小雨
85%
南风
3级
空气质量优
星期二
07月30日
白天小雨
85%
最高温度32℃
最低温度25℃
夜间中雨
90%
西风
3级
空气质量优
星期三
07月31日
白天小雨
NaN
最高温度31℃
最低温度26℃
夜间小雨
NaN
东南风
1级
空气质量优
星期四
08月01日
白天中雨
90%
最高温度33℃
最低温度25℃
夜间小雨
85%
东南风
1级
空气质量优
星期五
08月02日
白天小雨
85%
最高温度31℃
最低温度25℃
夜间小雨
85%
西南风
1级
NaN
星期六
08月03日
白天小雨
85%
最高温度30℃
最低温度26℃
夜间晴
0%
南风
1级
空气质量优
星期日
08月04日
白天小雨
85%
最高温度31℃
最低温度26℃
夜间小雨
85%
东南风
1级
空气质量优
星期一
08月05日
白天小雨
85%
最高温度31℃
最低温度25℃
夜间小雨
85%
东南风
1级
空气质量优
星期二
08月06日
白天小雨
85%
NaN
最低温度26℃
夜间阴
0%
东南风
1级
空气质量优
星期三
08月07日
白天多云
0%
最高温度31℃
最低温度24℃
夜间晴
0%
东南风
1级
空气质量优
星期四
08月08日
白天小雨
85%
最高温度29℃
最低温度24℃
夜间多云
0%
东北风
1级
空气质量优
星期五
08月09日
白天小雨
85%
最高温度29℃
最低温度24℃
夜间阴
0%
东北风
1级
空气质量优
星期五
08月09日
白天小雨
85%
最高温度29℃
最低温度24℃
夜间阴
0%
东北风
1级
空气质量优
星期日
07月28日
NaN
0%
最高温度33℃
最低温度27℃
夜间阴
0%
南风
3级
空气质量优
df.dropna(inplace=True )
df.reset_index(drop=True )
昨天
07月25日
白天阴
0%
最高温度34℃
最低温度27℃
夜间小雨
85%
南风
3级
空气质量优
0
今天
07月26日
白天小雨
85%
最高温度32℃
最低温度26℃
夜间小雨
85%
东南风
1级
空气质量优
1
星期六
07月27日
白天小雨
80%
最高温度31℃
最低温度27℃
夜间小雨
85%
东南风
3级
空气质量优
2
星期一
07月29日
白天小雨
80%
最高温度34℃
最低温度27℃
夜间小雨
85%
南风
3级
空气质量优
3
星期二
07月30日
白天小雨
85%
最高温度32℃
最低温度25℃
夜间中雨
90%
西风
3级
空气质量优
4
星期四
08月01日
白天中雨
90%
最高温度33℃
最低温度25℃
夜间小雨
85%
东南风
1级
空气质量优
5
星期六
08月03日
白天小雨
85%
最高温度30℃
最低温度26℃
夜间晴
0%
南风
1级
空气质量优
6
星期日
08月04日
白天小雨
85%
最高温度31℃
最低温度26℃
夜间小雨
85%
东南风
1级
空气质量优
7
星期一
08月05日
白天小雨
85%
最高温度31℃
最低温度25℃
夜间小雨
85%
东南风
1级
空气质量优
8
星期三
08月07日
白天多云
0%
最高温度31℃
最低温度24℃
夜间晴
0%
东南风
1级
空气质量优
9
星期四
08月08日
白天小雨
85%
最高温度29℃
最低温度24℃
夜间多云
0%
东北风
1级
空气质量优
10
星期五
08月09日
白天小雨
85%
最高温度29℃
最低温度24℃
夜间阴
0%
东北风
1级
空气质量优
11
星期五
08月09日
白天小雨
85%
最高温度29℃
最低温度24℃
夜间阴
0%
东北风
1级
空气质量优
数据的排序和排名
df = pd.read_excel("测试数据.xlsx" , sheet_name="天气" )
df.sort_values(by="3级" )
df.sort_values(by="3级" ,ascending=False )
df.sort_values(by=["3级" , "最高温度34℃" ], ascending=False )
昨天
07月25日
白天阴
0%
最高温度34℃
最低温度27℃
夜间小雨
85%
南风
3级
空气质量优
3
星期一
07月29日
白天小雨
80%
最高温度34℃
最低温度27℃
夜间小雨
85%
南风
3级
空气质量优
2
星期日
07月28日
NaN
0%
最高温度33℃
最低温度27℃
夜间阴
0%
南风
3级
空气质量优
16
星期日
07月28日
NaN
0%
最高温度33℃
最低温度27℃
夜间阴
0%
南风
3级
空气质量优
4
星期二
07月30日
白天小雨
85%
最高温度32℃
最低温度25℃
夜间中雨
90%
西风
3级
空气质量优
1
星期六
07月27日
白天小雨
80%
最高温度31℃
最低温度27℃
夜间小雨
85%
东南风
3级
空气质量优
6
星期四
08月01日
白天中雨
90%
最高温度33℃
最低温度25℃
夜间小雨
85%
东南风
1级
空气质量优
0
今天
07月26日
白天小雨
85%
最高温度32℃
最低温度26℃
夜间小雨
85%
东南风
1级
空气质量优
5
星期三
07月31日
白天小雨
NaN
最高温度31℃
最低温度26℃
夜间小雨
NaN
东南风
1级
空气质量优
7
星期五
08月02日
白天小雨
85%
最高温度31℃
最低温度25℃
夜间小雨
85%
西南风
1级
NaN
9
星期日
08月04日
白天小雨
85%
最高温度31℃
最低温度26℃
夜间小雨
85%
东南风
1级
空气质量优
10
星期一
08月05日
白天小雨
85%
最高温度31℃
最低温度25℃
夜间小雨
85%
东南风
1级
空气质量优
12
星期三
08月07日
白天多云
0%
最高温度31℃
最低温度24℃
夜间晴
0%
东南风
1级
空气质量优
8
星期六
08月03日
白天小雨
85%
最高温度30℃
最低温度26℃
夜间晴
0%
南风
1级
空气质量优
13
星期四
08月08日
白天小雨
85%
最高温度29℃
最低温度24℃
夜间多云
0%
东北风
1级
空气质量优
14
星期五
08月09日
白天小雨
85%
最高温度29℃
最低温度24℃
夜间阴
0%
东北风
1级
空气质量优
15
星期五
08月09日
白天小雨
85%
最高温度29℃
最低温度24℃
夜间阴
0%
东北风
1级
空气质量优
11
星期二
08月06日
白天小雨
85%
NaN
最低温度26℃
夜间阴
0%
东南风
1级
空气质量优
df = pd.read_excel("测试数据.xlsx" , sheet_name="天气" )
df = df.sort_values(["3级" ],ascending=False )
df['排名' ]=df["3级" ].rank(ascending=False )
df
昨天
07月25日
白天阴
0%
最高温度34℃
最低温度27℃
夜间小雨
85%
南风
3级
空气质量优
排名
16
星期日
07月28日
NaN
0%
最高温度33℃
最低温度27℃
夜间阴
0%
南风
3级
空气质量优
3.0
2
星期日
07月28日
NaN
0%
最高温度33℃
最低温度27℃
夜间阴
0%
南风
3级
空气质量优
3.0
3
星期一
07月29日
白天小雨
80%
最高温度34℃
最低温度27℃
夜间小雨
85%
南风
3级
空气质量优
3.0
4
星期二
07月30日
白天小雨
85%
最高温度32℃
最低温度25℃
夜间中雨
90%
西风
3级
空气质量优
3.0
1
星期六
07月27日
白天小雨
80%
最高温度31℃
最低温度27℃
夜间小雨
85%
东南风
3级
空气质量优
3.0
11
星期二
08月06日
白天小雨
85%
NaN
最低温度26℃
夜间阴
0%
东南风
1级
空气质量优
11.5
15
星期五
08月09日
白天小雨
85%
最高温度29℃
最低温度24℃
夜间阴
0%
东北风
1级
空气质量优
11.5
14
星期五
08月09日
白天小雨
85%
最高温度29℃
最低温度24℃
夜间阴
0%
东北风
1级
空气质量优
11.5
13
星期四
08月08日
白天小雨
85%
最高温度29℃
最低温度24℃
夜间多云
0%
东北风
1级
空气质量优
11.5
12
星期三
08月07日
白天多云
0%
最高温度31℃
最低温度24℃
夜间晴
0%
东南风
1级
空气质量优
11.5
0
今天
07月26日
白天小雨
85%
最高温度32℃
最低温度26℃
夜间小雨
85%
东南风
1级
空气质量优
11.5
10
星期一
08月05日
白天小雨
85%
最高温度31℃
最低温度25℃
夜间小雨
85%
东南风
1级
空气质量优
11.5
9
星期日
08月04日
白天小雨
85%
最高温度31℃
最低温度26℃
夜间小雨
85%
东南风
1级
空气质量优
11.5
7
星期五
08月02日
白天小雨
85%
最高温度31℃
最低温度25℃
夜间小雨
85%
西南风
1级
NaN
11.5
6
星期四
08月01日
白天中雨
90%
最高温度33℃
最低温度25℃
夜间小雨
85%
东南风
1级
空气质量优
11.5
5
星期三
07月31日
白天小雨
NaN
最高温度31℃
最低温度26℃
夜间小雨
NaN
东南风
1级
空气质量优
11.5
8
星期六
08月03日
白天小雨
85%
最高温度30℃
最低温度26℃
夜间晴
0%
南风
1级
空气质量优
11.5
数据的计算
求和
import pandas as pd
df = pd.read_excel("测试数据.xlsx" , sheet_name="成绩表" ,index_col=0 )
df
语文
数学
英语
姓名
朱楠
85
11
90
李鹏
0
69
68
党杰
3
44
94
王洁
92
73
8
韩健
86
93
72
范晶
26
16
9
张娜
36
45
5
林建
81
64
72
李秀荣
32
85
37
雷桂芝
29
26
87
df['总成绩' ]=df.sum (axis=1 )
df
语文
数学
英语
总成绩
姓名
朱楠
85
11
90
186
李鹏
0
69
68
137
党杰
3
44
94
141
王洁
92
73
8
173
韩健
86
93
72
251
范晶
26
16
9
51
张娜
36
45
5
86
林建
81
64
72
217
李秀荣
32
85
37
154
雷桂芝
29
26
87
142
pd.concat([df, df.sum (axis=0 ).to_frame('各科总成绩' ).T],axis=0 )
语文
数学
英语
总成绩
朱楠
85
11
90
186
李鹏
0
69
68
137
党杰
3
44
94
141
王洁
92
73
8
173
韩健
86
93
72
251
范晶
26
16
9
51
张娜
36
45
5
86
林建
81
64
72
217
李秀荣
32
85
37
154
雷桂芝
29
26
87
142
各科总成绩
470
526
542
1538
计算平均值
import pandas as pd
df = pd.read_excel("测试数据.xlsx" , sheet_name="成绩表" , index_col=0 )
df
语文
数学
英语
姓名
朱楠
85
11
90
李鹏
0
69
68
党杰
3
44
94
王洁
92
73
8
韩健
86
93
72
范晶
26
16
9
张娜
36
45
5
林建
81
64
72
李秀荣
32
85
37
雷桂芝
29
26
87
pd.concat([df,df.mean().to_frame(name='各科平均值' ).T])
语文
数学
英语
朱楠
85.0
11.0
90.0
李鹏
0.0
69.0
68.0
党杰
3.0
44.0
94.0
王洁
92.0
73.0
8.0
韩健
86.0
93.0
72.0
范晶
26.0
16.0
9.0
张娜
36.0
45.0
5.0
林建
81.0
64.0
72.0
李秀荣
32.0
85.0
37.0
雷桂芝
29.0
26.0
87.0
各科平均值
47.0
52.6
54.2
最大值和最小值
df.max ()
语文 92
数学 93
英语 94
dtype: int64
df.min ()
语文 0
数学 11
英语 5
dtype: int64
数据格式化
import pandas as pd
df = pd.read_excel("测试数据.xlsx" , sheet_name="小数数据" )
df
A
B
C
D
E
F
G
H
I
J
0
0.271921
0.996787
0.471560
0.249732
0.720678
0.453268
0.825131
0.093008
0.596691
0.954758
1
0.939883
0.215622
0.697735
0.261365
0.459877
0.230398
0.281006
0.510921
0.014184
0.601618
2
0.224412
0.636169
0.092120
0.276540
0.477949
0.840925
0.919196
0.059619
0.723866
0.683743
3
0.822699
0.508127
0.472934
0.969832
0.021230
0.905248
0.108958
0.695111
0.210165
0.566734
4
0.268033
0.974901
0.464375
0.162012
0.183204
0.855472
0.416701
0.857291
0.557196
0.632627
5
0.639998
0.260999
0.748257
0.692781
0.184112
0.692853
0.033808
0.113456
0.899956
0.382173
6
0.983553
0.656237
0.920638
0.670398
0.296118
0.276094
0.973147
0.461183
0.136607
0.634519
7
0.789665
0.412802
0.610604
0.146851
0.473035
0.803915
0.563969
0.876063
0.728956
0.140347
8
0.065738
0.912120
0.835372
0.728623
0.150974
0.698806
0.715707
0.100839
0.635582
0.474571
9
0.185891
0.971247
0.800855
0.536999
0.859812
0.247202
0.671131
0.402803
0.623624
0.865891
设置小数位置
df.round (2 )
A
B
C
D
E
F
G
H
I
J
0
0.27
1.00
0.47
0.25
0.72
0.45
0.83
0.09
0.60
0.95
1
0.94
0.22
0.70
0.26
0.46
0.23
0.28
0.51
0.01
0.60
2
0.22
0.64
0.09
0.28
0.48
0.84
0.92
0.06
0.72
0.68
3
0.82
0.51
0.47
0.97
0.02
0.91
0.11
0.70
0.21
0.57
4
0.27
0.97
0.46
0.16
0.18
0.86
0.42
0.86
0.56
0.63
5
0.64
0.26
0.75
0.69
0.18
0.69
0.03
0.11
0.90
0.38
6
0.98
0.66
0.92
0.67
0.30
0.28
0.97
0.46
0.14
0.63
7
0.79
0.41
0.61
0.15
0.47
0.80
0.56
0.88
0.73
0.14
8
0.07
0.91
0.84
0.73
0.15
0.70
0.72
0.10
0.64
0.47
9
0.19
0.97
0.80
0.54
0.86
0.25
0.67
0.40
0.62
0.87
df.round ({'a' : 2 , 'b' : 1 })
s = pd.Series(data=[1 ,2 ,0 ,1 ],index=['a' ,'b' ,'c' ,'d' ])
df.round (s)
A
B
C
D
E
F
G
H
I
J
0
0.271921
0.996787
0.471560
0.249732
0.720678
0.453268
0.825131
0.093008
0.596691
0.954758
1
0.939883
0.215622
0.697735
0.261365
0.459877
0.230398
0.281006
0.510921
0.014184
0.601618
2
0.224412
0.636169
0.092120
0.276540
0.477949
0.840925
0.919196
0.059619
0.723866
0.683743
3
0.822699
0.508127
0.472934
0.969832
0.021230
0.905248
0.108958
0.695111
0.210165
0.566734
4
0.268033
0.974901
0.464375
0.162012
0.183204
0.855472
0.416701
0.857291
0.557196
0.632627
5
0.639998
0.260999
0.748257
0.692781
0.184112
0.692853
0.033808
0.113456
0.899956
0.382173
6
0.983553
0.656237
0.920638
0.670398
0.296118
0.276094
0.973147
0.461183
0.136607
0.634519
7
0.789665
0.412802
0.610604
0.146851
0.473035
0.803915
0.563969
0.876063
0.728956
0.140347
8
0.065738
0.912120
0.835372
0.728623
0.150974
0.698806
0.715707
0.100839
0.635582
0.474571
9
0.185891
0.971247
0.800855
0.536999
0.859812
0.247202
0.671131
0.402803
0.623624
0.865891
df.map (lambda x: "{:.2f}" .format (x))
A
B
C
D
E
F
G
H
I
J
0
0.27
1.00
0.47
0.25
0.72
0.45
0.83
0.09
0.60
0.95
1
0.94
0.22
0.70
0.26
0.46
0.23
0.28
0.51
0.01
0.60
2
0.22
0.64
0.09
0.28
0.48
0.84
0.92
0.06
0.72
0.68
3
0.82
0.51
0.47
0.97
0.02
0.91
0.11
0.70
0.21
0.57
4
0.27
0.97
0.46
0.16
0.18
0.86
0.42
0.86
0.56
0.63
5
0.64
0.26
0.75
0.69
0.18
0.69
0.03
0.11
0.90
0.38
6
0.98
0.66
0.92
0.67
0.30
0.28
0.97
0.46
0.14
0.63
7
0.79
0.41
0.61
0.15
0.47
0.80
0.56
0.88
0.73
0.14
8
0.07
0.91
0.84
0.73
0.15
0.70
0.72
0.10
0.64
0.47
9
0.19
0.97
0.80
0.54
0.86
0.25
0.67
0.40
0.62
0.87
设置百分比
import pandas as pd
df = pd.read_excel("测试数据.xlsx" , sheet_name="小数数据" )
df
A
B
C
D
E
F
G
H
I
J
0
0.271921
0.996787
0.471560
0.249732
0.720678
0.453268
0.825131
0.093008
0.596691
0.954758
1
0.939883
0.215622
0.697735
0.261365
0.459877
0.230398
0.281006
0.510921
0.014184
0.601618
2
0.224412
0.636169
0.092120
0.276540
0.477949
0.840925
0.919196
0.059619
0.723866
0.683743
3
0.822699
0.508127
0.472934
0.969832
0.021230
0.905248
0.108958
0.695111
0.210165
0.566734
4
0.268033
0.974901
0.464375
0.162012
0.183204
0.855472
0.416701
0.857291
0.557196
0.632627
5
0.639998
0.260999
0.748257
0.692781
0.184112
0.692853
0.033808
0.113456
0.899956
0.382173
6
0.983553
0.656237
0.920638
0.670398
0.296118
0.276094
0.973147
0.461183
0.136607
0.634519
7
0.789665
0.412802
0.610604
0.146851
0.473035
0.803915
0.563969
0.876063
0.728956
0.140347
8
0.065738
0.912120
0.835372
0.728623
0.150974
0.698806
0.715707
0.100839
0.635582
0.474571
9
0.185891
0.971247
0.800855
0.536999
0.859812
0.247202
0.671131
0.402803
0.623624
0.865891
df['B' ].apply(lambda x: format (x, '.2%' ))
df["B" ].map (lambda x: format (x, ".0%" ))
0 100
1 22
2 64
3 51
4 97
5 26
6 66
7 41
8 91
9 97
Name: B, dtype: object
设置千分比
import pandas as pd
df = pd.read_excel("测试数据.xlsx" , sheet_name="小数数据" )
df
A
B
C
D
E
F
G
H
I
J
0
0.271921
0.996787
0.471560
0.249732
0.720678
0.453268
0.825131
0.093008
0.596691
0.954758
1
0.939883
0.215622
0.697735
0.261365
0.459877
0.230398
0.281006
0.510921
0.014184
0.601618
2
0.224412
0.636169
0.092120
0.276540
0.477949
0.840925
0.919196
0.059619
0.723866
0.683743
3
0.822699
0.508127
0.472934
0.969832
0.021230
0.905248
0.108958
0.695111
0.210165
0.566734
4
0.268033
0.974901
0.464375
0.162012
0.183204
0.855472
0.416701
0.857291
0.557196
0.632627
5
0.639998
0.260999
0.748257
0.692781
0.184112
0.692853
0.033808
0.113456
0.899956
0.382173
6
0.983553
0.656237
0.920638
0.670398
0.296118
0.276094
0.973147
0.461183
0.136607
0.634519
7
0.789665
0.412802
0.610604
0.146851
0.473035
0.803915
0.563969
0.876063
0.728956
0.140347
8
0.065738
0.912120
0.835372
0.728623
0.150974
0.698806
0.715707
0.100839
0.635582
0.474571
9
0.185891
0.971247
0.800855
0.536999
0.859812
0.247202
0.671131
0.402803
0.623624
0.865891
df['A' ].apply(lambda x:format (int (x*100000 ),',' ))
0 27 ,192
1 93 ,988
2 22 ,441
3 82 ,269
4 26 ,803
5 63 ,999
6 98 ,355
7 78 ,966
8 6 ,573
9 18 ,589
Name : A , dtype : object
applay、applymap、map的区别
apply
apply 方法是 DataFrame 和 Series 对象的一个方法。
它允许你对数据集中的行或列应用一个函数。
默认情况下,apply 在 DataFrame 上沿着轴向操作,这意味着它可以分别对每一列(默认)或每一行(通过设置 axis=1)应用函数。
你可以传递一个函数给 apply,这个函数可以返回一个标量值、Series 或 DataFrame。
import pandas as pd
df = pd.DataFrame({"A" : [1 , 2 ], "B" : [3 , 4 ]})
df_squared = df.apply(lambda x: x**2 )
print (df_squared)
s = pd.Series([1 , 2 , 3 , 4 , 5 ],index=['a' , 'b' , 'c' , 'd' , 'e' ])
s.apply(lambda x: x**2 )
A B
0 1 9
1 4 16
a 1
b 4
c 9
d 16
e 25
dtype: int64
applymap
applymap 方法是 DataFrame 对象的一个方法。
它用于对 DataFrame 中的每个元素应用一个函数。
applymap 总是作用于整个数据框的每个元素,没有 axis 参数。
被弃用,被map函数取代。
df = pd.DataFrame({"A" : [1 , 2 ], "B" : [3 , 4 ]})
df.map (lambda x: x + 10 )
map
map 是 Series 对象的一个方法,用于对 Series 中的每个元素应用一个函数。
它通常用于将 Series 中的每个值映射到另一个值。
map 通常用于字典、 Series、字典作为参数,用于转换值。
s = pd.Series([1 , 2 , 3 , 4 , 5 ], index=["a" , "b" , "c" , "d" , "e" ])
print ("-" * 20 + "Series+函数" + "-" * 20 )
print (s.map (lambda x: x + 1 ))
print ("-" * 20 + "DataFrame+函数" + "-" * 20 )
df = pd.DataFrame({"A" : [1 , 2 ], "B" : [3 , 4 ]})
print (df.map (lambda x: x + 1 ))
print ("-" * 20 + "DataFrame+字典" + "-" * 20 )
df = pd.DataFrame({"A" : [1 , 2 ], "B" : [3 , 4 ],'C' :['男' ,'女' ]})
print (df['C' ].map ({'男' :0 ,'女' :1 }))
--------------------Series +函数--------------------
a 2
b 3
c 4
d 5
e 6
dtype : int64
--------------------DataFrame +函数--------------------
A B
0 2 4
1 3 5
--------------------DataFrame +字典--------------------
0 0
1 1
Name : C , dtype : int64
数据分组统计
import pandas as pd
df = pd.read_excel("测试数据.xlsx" , sheet_name="产品销售表" )
print (df[["产品" , "数量" , "单价" ]].groupby("产品" ).sum ())
数量 单价
产品
CPU 448 11639
DVD 452 10977
发电机 465 8947
显示器 437 9160
键盘 255 7712
鼠标 271 6390
print (df[["产品" , "数量" , "销售员" ]].groupby(["产品" , "销售员" ]).sum ())
数量
产品 销售员
CPU 李文 137
李桂花 31
李玉梅 94
王杨 72
陈玉梅 114
DVD 李文 53
李桂花 33
李玉梅 92
王杨 70
陈玉梅 204
发电机 李文 148
李桂花 109
李玉梅 20
王杨 117
陈玉梅 71
显示器 李文 82
李桂花 63
李玉梅 84
王杨 63
陈玉梅 145
键盘 李文 60
李桂花 60
李玉梅 30
王杨 10
陈玉梅 95
鼠标 李文 94
李桂花 20
李玉梅 63
王杨 41
陈玉梅 53
df[["产品" , "数量" , "单价" ]].groupby('产品' )['数量' ].sum ()
产品
CPU 448
DVD 452
发电机 465
显示器 437
键盘 255
鼠标 271
Name: 数量, dtype: int64
for name,group in df[["产品" , "数量" , "单价" ]].groupby("产品" ):
print (name,group)
CPU 产品 数量 单价
10 CPU 31 378
32 CPU 20 930
36 CPU 33 380
44 CPU 31 989
46 CPU 20 272
48 CPU 31 695
61 CPU 33 619
63 CPU 31 701
67 CPU 20 908
70 CPU 31 148
71 CPU 20 965
72 CPU 10 441
77 CPU 10 831
83 CPU 31 862
84 CPU 20 304
88 CPU 10 962
90 CPU 33 580
92 CPU 33 674
DVD 产品 数量 单价
0 DVD 33 705
2 DVD 31 420
4 DVD 33 214
5 DVD 33 646
12 DVD 20 506
16 DVD 10 129
27 DVD 20 700
33 DVD 33 911
39 DVD 31 337
52 DVD 33 365
54 DVD 10 931
56 DVD 10 440
59 DVD 20 919
66 DVD 33 846
75 DVD 31 507
81 DVD 20 451
82 DVD 31 892
93 DVD 10 868
94 DVD 10 190
发电机 产品 数量 单价
6 发电机 10 414
7 发电机 33 395
13 发电机 31 316
15 发电机 20 247
21 发电机 10 561
24 发电机 20 350
28 发电机 33 409
29 发电机 33 906
31 发电机 33 828
40 发电机 20 352
47 发电机 20 679
57 发电机 33 323
58 发电机 31 890
68 发电机 10 324
89 发电机 31 552
96 发电机 31 631
97 发电机 33 565
98 发电机 33 205
显示器 产品 数量 单价
1 显示器 10 905
8 显示器 31 258
14 显示器 10 834
18 显示器 31 362
23 显示器 20 902
34 显示器 33 690
35 显示器 20 272
38 显示器 33 363
42 显示器 31 617
50 显示器 20 578
51 显示器 20 147
62 显示器 20 134
65 显示器 10 470
76 显示器 33 118
78 显示器 20 900
85 显示器 31 569
87 显示器 31 131
95 显示器 33 910
键盘 产品 数量 单价
9 键盘 10 497
17 键盘 10 798
19 键盘 10 606
20 键盘 10 761
22 键盘 20 980
25 键盘 10 518
41 键盘 20 325
43 键盘 10 859
45 键盘 31 588
53 键盘 20 259
69 键盘 33 356
73 键盘 31 358
86 键盘 20 617
91 键盘 20 190
鼠标 产品 数量 单价
3 鼠标 10 526
11 鼠标 20 608
26 鼠标 10 107
30 鼠标 33 754
37 鼠标 20 195
49 鼠标 31 403
55 鼠标 20 671
60 鼠标 31 551
64 鼠标 10 804
74 鼠标 33 434
79 鼠标 10 991
80 鼠标 10 110
99 鼠标 33 236
df1 = df[["产品" , "数量" , "销售员" ]].groupby(["产品" , "销售员" ])
for (k1,k2), group in df1:
print (k1,k2,group)
CPU 李文 产品 数量 销售员
32 CPU 20 李文
36 CPU 33 李文
71 CPU 20 李文
83 CPU 31 李文
92 CPU 33 李文
CPU 李桂花 产品 数量 销售员
63 CPU 31 李桂花
CPU 李玉梅 产品 数量 销售员
44 CPU 31 李玉梅
61 CPU 33 李玉梅
67 CPU 20 李玉梅
88 CPU 10 李玉梅
CPU 王杨 产品 数量 销售员
48 CPU 31 王杨
70 CPU 31 王杨
72 CPU 10 王杨
CPU 陈玉梅 产品 数量 销售员
10 CPU 31 陈玉梅
46 CPU 20 陈玉梅
77 CPU 10 陈玉梅
84 CPU 20 陈玉梅
90 CPU 33 陈玉梅
DVD 李文 产品 数量 销售员
12 DVD 20 李文
52 DVD 33 李文
DVD 李桂花 产品 数量 销售员
0 DVD 33 李桂花
DVD 李玉梅 产品 数量 销售员
27 DVD 20 李玉梅
39 DVD 31 李玉梅
56 DVD 10 李玉梅
82 DVD 31 李玉梅
DVD 王杨 产品 数量 销售员
16 DVD 10 王杨
54 DVD 10 王杨
59 DVD 20 王杨
81 DVD 20 王杨
93 DVD 10 王杨
DVD 陈玉梅 产品 数量 销售员
2 DVD 31 陈玉梅
4 DVD 33 陈玉梅
5 DVD 33 陈玉梅
33 DVD 33 陈玉梅
66 DVD 33 陈玉梅
75 DVD 31 陈玉梅
94 DVD 10 陈玉梅
发电机 李文 产品 数量 销售员
6 发电机 10 李文
7 发电机 33 李文
68 发电机 10 李文
89 发电机 31 李文
96 发电机 31 李文
98 发电机 33 李文
发电机 李桂花 产品 数量 销售员
21 发电机 10 李桂花
28 发电机 33 李桂花
31 发电机 33 李桂花
97 发电机 33 李桂花
发电机 李玉梅 产品 数量 销售员
40 发电机 20 李玉梅
发电机 王杨 产品 数量 销售员
13 发电机 31 王杨
15 发电机 20 王杨
29 发电机 33 王杨
57 发电机 33 王杨
发电机 陈玉梅 产品 数量 销售员
24 发电机 20 陈玉梅
47 发电机 20 陈玉梅
58 发电机 31 陈玉梅
显示器 李文 产品 数量 销售员
18 显示器 31 李文
51 显示器 20 李文
87 显示器 31 李文
显示器 李桂花 产品 数量 销售员
1 显示器 10 李桂花
38 显示器 33 李桂花
62 显示器 20 李桂花
显示器 李玉梅 产品 数量 销售员
42 显示器 31 李玉梅
50 显示器 20 李玉梅
95 显示器 33 李玉梅
显示器 王杨 产品 数量 销售员
23 显示器 20 王杨
34 显示器 33 王杨
65 显示器 10 王杨
显示器 陈玉梅 产品 数量 销售员
8 显示器 31 陈玉梅
14 显示器 10 陈玉梅
35 显示器 20 陈玉梅
76 显示器 33 陈玉梅
78 显示器 20 陈玉梅
85 显示器 31 陈玉梅
键盘 李文 产品 数量 销售员
9 键盘 10 李文
17 键盘 10 李文
22 键盘 20 李文
41 键盘 20 李文
键盘 李桂花 产品 数量 销售员
19 键盘 10 李桂花
20 键盘 10 李桂花
53 键盘 20 李桂花
91 键盘 20 李桂花
键盘 李玉梅 产品 数量 销售员
25 键盘 10 李玉梅
86 键盘 20 李玉梅
键盘 王杨 产品 数量 销售员
43 键盘 10 王杨
键盘 陈玉梅 产品 数量 销售员
45 键盘 31 陈玉梅
69 键盘 33 陈玉梅
73 键盘 31 陈玉梅
鼠标 李文 产品 数量 销售员
49 鼠标 31 李文
55 鼠标 20 李文
80 鼠标 10 李文
99 鼠标 33 李文
鼠标 李桂花 产品 数量 销售员
37 鼠标 20 李桂花
鼠标 李玉梅 产品 数量 销售员
3 鼠标 10 李玉梅
26 鼠标 10 李玉梅
74 鼠标 33 李玉梅
79 鼠标 10 李玉梅
鼠标 王杨 产品 数量 销售员
60 鼠标 31 王杨
64 鼠标 10 王杨
鼠标 陈玉梅 产品 数量 销售员
11 鼠标 20 陈玉梅
30 鼠标 33 陈玉梅
df1 = df[["产品" , "数量" ,'单价' ]]
df1.groupby("产品" )['数量' ].agg(['sum' ,'mean' ])
sum
mean
产品
CPU
448
24.888889
DVD
452
23.789474
发电机
465
25.833333
显示器
437
24.277778
键盘
255
18.214286
鼠标
271
20.846154
df1 = df[["产品" , "数量" , "单价" ]]
df1.groupby("产品" ).agg({'数量' :['sum' ,'mean' ],'单价' :['max' ,'max' ]})
数量
单价
sum
mean
max
max
产品
CPU
448
24.888889
989
989
DVD
452
23.789474
931
931
发电机
465
25.833333
906
906
显示器
437
24.277778
910
910
键盘
255
18.214286
980
980
鼠标
271
20.846154
991
991
df['产品' ].value_counts()
maxcount = lambda x: x.value_counts().iloc[0 ]
maxcount.__name__ = '库存最多的产品'
df1=df.agg({'产品' :[maxcount],'数量' :['sum' ]})
df1
产品
数量
库存最多的产品
19.0
NaN
sum
NaN
2328.0
import pandas as pd
df = pd.read_excel("测试数据.xlsx" , sheet_name="地区销售表" )
dic = {"北京" :'华北地区' ,
"哈尔滨" :'东北地区' ,
"广州" :'华南地区' ,
"深圳" :'华南地区' ,
"杭州" :'华东地区' ,
"沈阳" :'东北地区' ,
}
df = df.set_index("商品名称" )
df.T.groupby(dic).sum ()
商品名称
鼠标
键盘
DVD
显示器
发电机
CPU
东北地区
135
112
71
60
187
138
华东地区
31
31
4
32
97
24
华北地区
48
78
10
36
100
20
华南地区
41
54
73
140
182
93
import pandas as pd
df = pd.read_excel("测试数据.xlsx" , sheet_name="地区销售表" )
dic = {
"北京" : "华北地区" ,
"哈尔滨" : "东北地区" ,
"广州" : "华南地区" ,
"深圳" : "华南地区" ,
"杭州" : "华东地区" ,
"沈阳" : "东北地区" ,
}
df = df.set_index("商品名称" )
s = pd.Series(dic)
df.T.groupby(s).sum ()
商品名称
鼠标
键盘
DVD
显示器
发电机
CPU
东北地区
135
112
71
60
187
138
华东地区
31
31
4
32
97
24
华北地区
48
78
10
36
100
20
华南地区
41
54
73
140
182
93
数据移位
import pandas as pd
data = [3453 ,8345 ,3423 ,8753 ,3123 ]
index=[ i for i in range (1 ,len (data)+1 )]
df = pd.DataFrame(data,index=index,columns=['OPPO' ])
print (df)
df['销量差' ] = df['OPPO' ] - df['OPPO' ].shift()
print (df["OPPO" ].shift())
df
OPPO
1 3453
2 8345
3 3423
4 8753
5 3123
1 NaN
2 3453.0
3 8345.0
4 3423.0
5 8753.0
Name: OPPO, dtype: float64
OPPO
销量差
1
3453
NaN
2
8345
4892.0
3
3423
-4922.0
4
8753
5330.0
5
3123
-5630.0
数据转换
import pandas as pd
df = pd.read_excel("测试数据.xlsx" , sheet_name="发货单表" )
df.head()
客户名称
联系电话
快递地址
0
王兵
15147000967
山西省 通辽 霍路X座
1
吴健
13762072887
湖南省 海门 尚路K座
2
冯琳
15562303487
台湾省 澳门 叶路f座
3
胡岩
18844855983
上海市 合山 银川路B座
4
张兰英
13165766513
内蒙古自治区 六安 乌鲁木齐路B座
df1 = df['快递地址' ].str .split(' ' ,expand=True )
df1.columns = ['省' ,'市' ,'街道' ]
df1
省
市
街道
0
山西省
通辽
霍路X座
1
湖南省
海门
尚路K座
2
台湾省
澳门
叶路f座
3
上海市
合山
银川路B座
4
内蒙古自治区
六安
乌鲁木齐路B座
...
...
...
...
95
香港特别行政区
六安
朱街w座
96
江苏省
上海
朱路z座
97
黑龙江省
上海
福州街a座
98
澳门特别行政区
海门
上海路P座
99
辽宁省
沈阳
佛山街A座
100 rows × 3 columns
import pandas as pd
dic = {
'col1' : [1 , 2 ],
'col2' : [('a' ,'b' ,'c' ), ('d' ,'e' ,'f' )]
}
df = pd.DataFrame(dic)
df[['col2_1' ,'col2_2' ,'col2_3' ]]= df['col2' ].apply(pd.Series)
df
col1
col2
col2_1
col2_2
col2_3
0
1
(a, b, c)
a
b
c
1
2
(d, e, f)
d
e
f
import pandas as pd
dic = {"col1" : [1 , 2 ], "col2" : [("a" , "b" , "c" ), ("d" , "e" , "f" )]}
df = pd.DataFrame(dic)
df.join(df['col2' ].apply(pd.Series))
col1
col2
0
1
2
0
1
(a, b, c)
a
b
c
1
2
(d, e, f)
d
e
f
数据合并
merge方法
一对一
import pandas as pd
df1 = pd.read_excel("测试数据.xlsx" , sheet_name="成绩表" )
df2 = pd.read_excel("测试数据.xlsx" , sheet_name="体育表" )
print (df1.head())
print (df2.head())
姓名 语文 数学 英语
0 朱楠 85 11 90
1 李鹏 0 69 68
2 党杰 3 44 94
3 王洁 92 73 8
4 韩健 86 93 72
姓名 体育
0 朱楠 20
1 李鹏 8
2 党杰 90
3 王洁 96
4 韩健 10
pd.merge(df1,df2,on='姓名' )
姓名
语文
数学
英语
体育
0
朱楠
85
11
90
20
1
李鹏
0
69
68
8
2
党杰
3
44
94
90
3
王洁
92
73
8
96
4
韩健
86
93
72
10
5
范晶
26
16
9
27
6
张娜
36
45
5
25
7
林建
81
64
72
8
8
李秀荣
32
85
37
24
9
雷桂芝
29
26
87
38
pd.merge(df1, df2, left_index=True , right_index=True )
姓名_x
语文
数学
英语
姓名_y
体育
0
朱楠
85
11
90
朱楠
20
1
李鹏
0
69
68
李鹏
8
2
党杰
3
44
94
党杰
90
3
王洁
92
73
8
王洁
96
4
韩健
86
93
72
韩健
10
5
范晶
26
16
9
范晶
27
6
张娜
36
45
5
张娜
25
7
林建
81
64
72
林建
8
8
李秀荣
32
85
37
李秀荣
24
9
雷桂芝
29
26
87
雷桂芝
38
print (pd.merge(df1, df2, how="left" ))
print (pd.merge(df1, df2, how="right" ))
姓名 语文 数学 英语 体育
0 朱楠 85 11 90 20
1 李鹏 0 69 68 8
2 党杰 3 44 94 90
3 王洁 92 73 8 96
4 韩健 86 93 72 10
5 范晶 26 16 9 27
6 张娜 36 45 5 25
7 林建 81 64 72 8
8 李秀荣 32 85 37 24
9 雷桂芝 29 26 87 38
姓名 语文 数学 英语 体育
0 朱楠 85 11 90 20
1 李鹏 0 69 68 8
2 党杰 3 44 94 90
3 王洁 92 73 8 96
4 韩健 86 93 72 10
5 范晶 26 16 9 27
6 张娜 36 45 5 25
7 林建 81 64 72 8
8 李秀荣 32 85 37 24
9 雷桂芝 29 26 87 38
一对多
import pandas as pd
df1 = pd.DataFrame({
'编号' :['msb1001' ,'msb1002' ,'msb1003' ],
'姓名' :['张三' ,'李四' ,'王五' ],
})
df2 = pd.DataFrame({
'编号' :['msb1001' ,'msb1001' ,'msb1003' ],
'语文' :[131 ,122 ,132 ],
'数学' :[121 ,142 ,112 ],
'英语' :[101 ,102 ,102 ],
'月份' :['1月' ,'2月' ,'1月' ]
})
pd.merge(df1,df2,on='编号' )
编号
姓名
语文
数学
英语
月份
0
msb1001
张三
131
121
101
1月
1
msb1001
张三
122
142
102
2月
2
msb1003
王五
132
112
102
1月
多对多
import pandas as pd
df1 = pd.DataFrame(
{
'编号' :['msb1001' ,'msb1002' ,'msb1003' ,'msb1001' ,'msb1002' ,'msb1003' ],
'语文' :[37 ,45 ,56 ,78 ,89 ,90 ],
'英语' :[45 ,56 ,67 ,89 ,90 ,67 ],
'数学' :[56 ,67 ,78 ,90 ,89 ,78 ]
}
)
df2 = pd.DataFrame(
{
'编号' :['msb1001' ,'msb1002' ,'msb1003' ,'msb1001' ,'msb1001' ,'msb1001' ],
'体育' :[37 ,45 ,56 ,78 ,89 ,90 ],
}
)
pd.merge(df1,df2)
编号
语文
英语
数学
体育
0
msb1001
37
45
56
37
1
msb1001
37
45
56
78
2
msb1001
37
45
56
89
3
msb1001
37
45
56
90
4
msb1002
45
56
67
45
5
msb1003
56
67
78
56
6
msb1001
78
89
90
37
7
msb1001
78
89
90
78
8
msb1001
78
89
90
89
9
msb1001
78
89
90
90
10
msb1002
89
90
89
45
11
msb1003
90
67
78
56
concat方法
表结构形同纵向连接
import pandas as pd
df1 = pd.read_excel("测试数据.xlsx" , sheet_name="concat1" )
df2 = pd.read_excel("测试数据.xlsx" , sheet_name="concat2" )
pd.concat(
[df1, df2],
keys=['表1' ,'表2' ],
)
A
B
C
D
E
F
表1
0
100
42
67
17
37
37
1
20
34
58
7
80
27
2
92
87
71
69
96
60
3
78
63
44
24
55
52
4
64
11
29
70
20
93
5
14
86
28
10
93
98
6
42
11
67
40
11
14
7
77
20
72
80
83
19
8
64
84
1
79
22
39
9
4
100
69
42
83
54
表2
0
30
42
19
76
90
26
1
7
100
40
7
28
78
2
35
48
9
35
33
19
3
57
1
27
4
2
60
4
41
0
79
50
74
71
5
59
72
9
96
41
45
6
10
3
32
26
10
2
7
80
66
0
7
68
50
8
40
76
97
90
4
39
9
23
22
81
81
63
36
横向连接
import pandas as pd
df1 = pd.read_excel("测试数据.xlsx" , sheet_name="concat1" )
df2 = pd.read_excel("测试数据.xlsx" , sheet_name="concat2" )
pd.concat([df1, df2],axis=1 )
A
B
C
D
E
F
A
B
C
D
E
F
0
100
42
67
17
37
37
30
42
19
76
90
26
1
20
34
58
7
80
27
7
100
40
7
28
78
2
92
87
71
69
96
60
35
48
9
35
33
19
3
78
63
44
24
55
52
57
1
27
4
2
60
4
64
11
29
70
20
93
41
0
79
50
74
71
5
14
86
28
10
93
98
59
72
9
96
41
45
6
42
11
67
40
11
14
10
3
32
26
10
2
7
77
20
72
80
83
19
80
66
0
7
68
50
8
64
84
1
79
22
39
40
76
97
90
4
39
9
4
100
69
42
83
54
23
22
81
81
63
36
交叉连接
import pandas as pd
df1 = pd.read_excel("测试数据.xlsx" , sheet_name="concat1" )
df2 = pd.read_excel("测试数据.xlsx" , sheet_name="concat2" )
pd.concat([df1, df2], axis=1 ,join="inner" )
A
B
C
D
E
F
A
B
C
D
E
F
0
100
42
67
17
37
37
30
42
19
76
90
26
1
20
34
58
7
80
27
7
100
40
7
28
78
2
92
87
71
69
96
60
35
48
9
35
33
19
3
78
63
44
24
55
52
57
1
27
4
2
60
4
64
11
29
70
20
93
41
0
79
50
74
71
5
14
86
28
10
93
98
59
72
9
96
41
45
6
42
11
67
40
11
14
10
3
32
26
10
2
7
77
20
72
80
83
19
80
66
0
7
68
50
8
64
84
1
79
22
39
40
76
97
90
4
39
9
4
100
69
42
83
54
23
22
81
81
63
36
API
reindex函数
reindex 函数用于将现有数据结构(如 Series 或 DataFrame)重新索引,以对齐到新的索引。这通常用于对数据进行对齐或填充缺失的数据。
pandas.Series.reindex(self, new_index, axis=0, method=None, copy=True, level=None, fill_value=np.nan, limit=None, tolerance=None)
pandas.DataFrame.reindex(self, new_index, new_columns, axis=0, method=None, copy=True, level=None, fill_value=None, limit=None, tolerance=None)
参数(Parameters)
index:新的索引列表。长度必须与要对齐的数据长度一致。
axis:指定要操作的轴。对于 Series 对象,这个参数将被忽略,因为 Series 只有一维。
method:插值方法。如果指定,将用于重新索引时填充缺失值。可能的值包括 'ffill'(前向填充)、'bfill'(后向填充)等。
copy:如果为 True,则即使新索引与旧索引相同也会复制数据。如果为 False,则只有在必要时才会复制。
level:在多层索引的情况下,用于对齐索引的级别。
fill_value:用于填充缺失索引的标量值。
limit:在前向或后向填充时,允许的最大填充量。
tolerance:在对齐索引时,允许的索引不匹配的最大容差。
set_index函数
这个方法用于将 DataFrame 或 Series 的某个列或多个列设置为索引。
参数(Parameters)
keys : 要设置为索引的列标签或列标签列表。可以是单个标签(字符串),多个标签的列表,或者现有的索引数组。
drop : 决定是否从数据中删除用作索引的列。如果为 True,则这些列将不再作为 DataFrame 的列存在。
append :
类型: 如果为 True,则将指定的索引追加到现有的索引中,而不是替换它。
verify_integrity : 如果为 True,则会检查新索引是否能够唯一标识每一行,如果新索引中有重复项,则会抛出异常。
inplace : 此参数在这段代码中被固定为 True
,意味着 set_index
方法将直接在原对象上进行修改,而不返回新的 DataFrame 或 Series。修改后的原对象将反映新的索引设置。
date_range
date_range 函数是 Pandas 库中用于生成日期序列的非常有用的工具。它允许你指定开始日期、结束日期、期间数、频率等参数来创建一个 DatetimeIndex。以下是 date_range 函数参数的详细说明:
pandas.date_range(start=None , end=None , periods=None , freq=None , tz=None , normalize=False , name=None , inclusive='both' , *, unit=None , **kwargs)
参数
start: 日期范围的起始日期。如果为 None,则使用 'end' 参数,'periods' 参数指定的数目向前计算。
end: 日期范围的结束日期。如果为 None,则使用 'start' 参数,'periods' 参数指定的数目向后计算。
periods: 要生成的日期数量。如果 'start' 和 'end' 都为 None,则不能使用 'periods'。
freq: 日期的频率。例如 'D' 表示天,'H' 表示小时等。如果为 None,则根据 'start' 和 'end' 的间隔自动推断。
tz: 时间的时区。例如 'UTC','Asia/Shanghai' 等。
normalize: 是否将开始日期和结束日期归一化到 '00:00:00'。
name: 为生成的日期序列设置名称。
inclusive 在生成的日期范围内,'start' 和 'end' 日期是否包含在内。默认为 'both'。
unit: 用于指定 'start' 和 'end' 参数的单位,例如 'D' 表示天,'s' 表示秒等。这通常用于 'start' 和 'end' 为数字时。
**kwargs:传递给底层日期生成器的其他参数。
Timestamp
Timestamp 是一个表示单个时间戳的类,通常用于处理日期和时间。Timestamp 对象可以被创建来表示特定的日期、时间和时区信息。
pd.Timestamp('2017-05-01' )
Timestamp ('2017 -05 -01 00 :00 :00 ')
import re
import requests
from lxml import etree
def get_html (url ):
headers = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
}
response = requests.get(url, headers=headers)
return response.text
text = get_html("https://uuzi.net/latest-iptv-m3u-streams-2024/" )
with open ("直播源.txt" , "a" , encoding="utf-8" ) as f:
for url, title in re.findall(r"<li><a href=(https:.*?m3u8)>(.*?)</a>" , text):
f.write("," .join([url, title]) + "\n" )
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具