做注册会计师网站,如何注册网上商城,签名设计免费版在线,聊城集团网站建设报价CSDN 课程推荐#xff1a;《迈向数据科学家#xff1a;带你玩转Python数据分析》#xff0c;讲师齐伟#xff0c;苏州研途教育科技有限公司CTO#xff0c;苏州大学应用统计专业硕士生指导委员会委员#xff1b;已出版《跟老齐学Python#xff1a;轻松入门》《跟老齐学Py…
CSDN 课程推荐《迈向数据科学家带你玩转Python数据分析》讲师齐伟苏州研途教育科技有限公司CTO苏州大学应用统计专业硕士生指导委员会委员已出版《跟老齐学Python轻松入门》《跟老齐学PythonDjango实战》、《跟老齐学Python数据分析》和《Python大学实用教程》畅销图书。Pandas 系列文章
Python 数据分析三剑客之 Pandas一认识 Pandas 及其 Series、DataFrame 对象Python 数据分析三剑客之 Pandas二Index 索引对象以及各种索引操作Python 数据分析三剑客之 Pandas三算术运算与缺失值的处理Python 数据分析三剑客之 Pandas四函数应用、映射、排序和层级索引Python 数据分析三剑客之 Pandas五统计计算与统计描述Python 数据分析三剑客之 Pandas六GroupBy 数据分裂、应用与合并Python 数据分析三剑客之 Pandas七合并数据集Python 数据分析三剑客之 Pandas八数据重塑、重复数据处理与数据替换Python 数据分析三剑客之 Pandas九时间序列Python 数据分析三剑客之 Pandas十数据读写 另有 NumPy、Matplotlib 系列文章已更新完毕欢迎关注
NumPy 系列文章https://itrhx.blog.csdn.net/category_9780393.htmlMatplotlib 系列文章https://itrhx.blog.csdn.net/category_9780418.html 推荐学习资料与网站博主参与部分文档翻译
NumPy 官方中文网https://www.numpy.org.cn/Pandas 官方中文网https://www.pypandas.cn/Matplotlib 官方中文网https://www.matplotlib.org.cn/NumPy、Matplotlib、Pandas 速查表https://github.com/TRHX/Python-quick-reference-table 文章目录【01x00】数据重塑【01x01】stack【01x02】unstack【02x00】重复数据处理【02x01】duplicated【02x02】drop_duplicates【03x00】数据替换【03x01】replace【03x02】where【03x03】mask这里是一段防爬虫文本请读者忽略。
本文原创首发于 CSDN作者 TRHX。
博客首页https://itrhx.blog.csdn.net/
本文链接https://itrhx.blog.csdn.net/article/details/106900748
未经授权禁止转载恶意转载后果自负尊重原创远离剽窃【01x00】数据重塑
有许多用于重新排列表格型数据的基础运算。这些函数也称作重塑reshape或轴向旋转pivot运算。重塑层次化索引主要有以下两个方法 stack将数据的列转换成行 unstack将数据的行转换成列。
【01x01】stack
stack 方法用于将数据的列转换成为行
基本语法DataFrame.stack(self, level-1, dropnaTrue)
官方文档https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.stack.html
参数描述level从列转换到行指定不同层级的列索引或列标签、由列索引或列标签组成的数组默认-1dropnabool 类型是否删除重塑后数据中所有值为 NaN 的行默认 True
单层列Single level columns import pandas as pdobj pd.DataFrame([[0, 1], [2, 3]], index[cat, dog], columns[weight, height])objweight height
cat 0 1
dog 2 3obj.stack()
cat weight 0height 1
dog weight 2height 3
dtype: int64多层列Multi level columns import pandas as pdmulticol pd.MultiIndex.from_tuples([(weight, kg), (weight, pounds)])obj pd.DataFrame([[1, 2], [2, 4]], index[cat, dog], columnsmulticol)objweight kg pounds
cat 1 2
dog 2 4obj.stack()weight
cat kg 1pounds 2
dog kg 2pounds 4缺失值填充 import pandas as pdmulticol pd.MultiIndex.from_tuples([(weight, kg), (height, m)])obj pd.DataFrame([[1.0, 2.0], [3.0, 4.0]], index[cat, dog], columnsmulticol)objweight heightkg m
cat 1.0 2.0
dog 3.0 4.0obj.stack()height weight
cat kg NaN 1.0m 2.0 NaN
dog kg NaN 3.0m 4.0 NaN通过 level 参数指定不同层级的轴进行重塑 import pandas as pdmulticol pd.MultiIndex.from_tuples([(weight, kg), (height, m)])obj pd.DataFrame([[1.0, 2.0], [3.0, 4.0]], index[cat, dog], columnsmulticol)objweight heightkg m
cat 1.0 2.0
dog 3.0 4.0obj.stack(level0)kg m
cat height NaN 2.0weight 1.0 NaN
dog height NaN 4.0weight 3.0 NaNobj.stack(level1)height weight
cat kg NaN 1.0m 2.0 NaN
dog kg NaN 3.0m 4.0 NaNobj.stack(level[0, 1])
cat height m 2.0weight kg 1.0
dog height m 4.0weight kg 3.0
dtype: float64对于重塑后的数据若有一行的值均为 NaN则默认会被删除可以设置 dropnaFalse 来保留缺失值 import pandas as pdmulticol pd.MultiIndex.from_tuples([(weight, kg), (height, m)])obj pd.DataFrame([[None, 1.0], [2.0, 3.0]], index[cat, dog], columnsmulticol)objweight heightkg m
cat NaN 1.0
dog 2.0 3.0obj.stack(dropnaFalse)height weight
cat kg NaN NaNm 1.0 NaN
dog kg NaN 2.0m 3.0 NaNobj.stack(dropnaTrue)height weight
cat m 1.0 NaN
dog kg NaN 2.0m 3.0 NaN【01x02】unstack
unstack将数据的行转换成列。
基本语法 Series.unstack(self, level-1, fill_valueNone) DataFrame.unstack(self, level-1, fill_valueNone)
官方文档 https://pandas.pydata.org/docs/reference/api/pandas.Series.unstack.html https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.unstack.html
参数描述level从行转换到列指定不同层级的行索引默认-1fill_value用于替换 NaN 的值
在 Series 对象中的应用 import pandas as pdobj pd.Series([1, 2, 3, 4], indexpd.MultiIndex.from_product([[one, two], [a, b]]))obj
one a 1b 2
two a 3b 4
dtype: int64obj.unstack()a b
one 1 2
two 3 4obj.unstack(level0)one two
a 1 3
b 2 4和 stack 方法类似如果值不存在将会引入缺失值NaN import pandas as pdobj1 pd.Series([0, 1, 2, 3], index[a, b, c, d])obj2 pd.Series([4, 5, 6], index[c, d, e])obj3 pd.concat([obj1, obj2], keys[one, two])obj3
one a 0b 1c 2d 3
two c 4d 5e 6
dtype: int64obj3.unstack()a b c d e
one 0.0 1.0 2.0 3.0 NaN
two NaN NaN 4.0 5.0 6.0在 DataFrame 对象中的应用 import pandas as pdimport numpy as npobj pd.DataFrame(np.arange(6).reshape((2, 3)),indexpd.Index([Ohio,Colorado], namestate),columnspd.Index([one, two, three],namenumber))obj
number one two three
state
Ohio 0 1 2
Colorado 3 4 5obj2 obj.stack()obj2
state number
Ohio one 0two 1three 2
Colorado one 3two 4three 5
dtype: int32obj3 pd.DataFrame({left: obj2, right: obj2 5},columnspd.Index([left, right], nameside))obj3
side left right
state number
Ohio one 0 5two 1 6three 2 7
Colorado one 3 8two 4 9three 5 10obj3.unstack(state)
side left right
state Ohio Colorado Ohio Colorado
number
one 0 3 5 8
two 1 4 6 9
three 2 5 7 10obj3.unstack(state).stack(side)
state Colorado Ohio
number side
one left 3 0right 8 5
two left 4 1right 9 6
three left 5 2right 10 7这里是一段防爬虫文本请读者忽略。
本文原创首发于 CSDN作者 TRHX。
博客首页https://itrhx.blog.csdn.net/
本文链接https://itrhx.blog.csdn.net/article/details/106900748
未经授权禁止转载恶意转载后果自负尊重原创远离剽窃【02x00】重复数据处理 duplicated判断是否为重复值 drop_duplicates删除重复值。
【02x01】duplicated
duplicated 方法可以判断值是否为重复数据。
基本语法 Series.duplicated(self, keepfirst) DataFrame.duplicated(self, subset: Union[Hashable, Sequence[Hashable], NoneType] None, keep: Union[str, bool] first) → ’Series’
官方文档 https://pandas.pydata.org/docs/reference/api/pandas.Series.duplicated.html https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.duplicated.html
参数描述keep标记重复项的方法默认 firstfirst将非重复项和第一个重复项标记为 False其他重复项标记为 Truelast将非重复项和最后一个重复项标记为 False其他重复项标记为 TrueFalse将所有重复项标记为 True非重复项标记为 Falsesubset列标签或标签序列在 DataFrame 对象中才有此参数用于指定某列仅标记该列的重复项默认情况下将考虑所有列
默认情况下对于每组重复的值第一个出现的重复值标记为 False其他重复项标记为 True非重复项标记为 False相当于 keepfirst import pandas as pdobj pd.Series([lama, cow, lama, beetle, lama])obj
0 lama
1 cow
2 lama
3 beetle
4 lama
dtype: objectobj.duplicated()
0 False
1 False
2 True
3 False
4 True
dtype: boolobj.duplicated(keepfirst)
0 False
1 False
2 True
3 False
4 True
dtype: bool设置 keeplast将每组非重复项和最后一次出现的重复项标记为 False其他重复项标记为 True设置 keepFalse则所有重复项均为 True其他值为 False import pandas as pdobj pd.Series([lama, cow, lama, beetle, lama])obj
0 lama
1 cow
2 lama
3 beetle
4 lama
dtype: objectobj.duplicated(keeplast)
0 True
1 False
2 True
3 False
4 False
dtype: boolobj.duplicated(keepFalse)
0 True
1 False
2 True
3 False
4 True
dtype: bool在 DataFrame 对象中subset 参数用于指定某列仅标记该列的重复项默认情况下将考虑所有列 import pandas as pdimport numpy as npobj pd.DataFrame({data1 : [a] * 4 [b] * 4,data2 : np.random.randint(0, 4, 8)})objdata1 data2
0 a 0
1 a 0
2 a 0
3 a 3
4 b 3
5 b 3
6 b 0
7 b 2obj.duplicated()
0 False
1 True
2 True
3 False
4 False
5 True
6 False
7 False
dtype: boolobj.duplicated(subsetdata1)
0 False
1 True
2 True
3 True
4 False
5 True
6 True
7 True
dtype: boolobj.duplicated(subsetdata2, keeplast)
0 True
1 True
2 True
3 True
4 True
5 False
6 False
7 False
dtype: bool【02x02】drop_duplicates
drop_duplicates 方法会返回一个删除了重复值的序列。
基本语法
Series.drop_duplicates(self, keepfirst, inplaceFalse)DataFrame.drop_duplicates(self,subset: Union[Hashable, Sequence[Hashable], NoneType] None,keep: Union[str, bool] first,inplace: bool False,ignore_index: bool False) → Union[ForwardRef(‘DataFrame’), NoneType]官方文档 https://pandas.pydata.org/docs/reference/api/pandas.Series.drop_duplicates.html https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.drop_duplicates.html
参数描述keep删除重复项的方法默认 firstfirst保留非重复项和第一个重复项其他重复项标记均删除last保留非重复项和最后一个重复项其他重复项删除False将所有重复项删除非重复项保留inplace是否返回删除重复项后的值默认 False若设置为 True则不返回值直接改变原数据subset列标签或标签序列在 DataFrame 对象中才有此参数用于指定某列仅标记该列的重复项默认情况下将考虑所有列ignore_indexbool 类型在 DataFrame 对象中才有此参数是否忽略原对象的轴标记默认 False如果为 True则新对象的索引将是 0, 1, 2, …, n-1
keep 参数的使用 import pandas as pdobj pd.Series([lama, cow, lama, beetle, lama, hippo], nameanimal)obj
0 lama
1 cow
2 lama
3 beetle
4 lama
5 hippo
Name: animal, dtype: objectobj.drop_duplicates()
0 lama
1 cow
3 beetle
5 hippo
Name: animal, dtype: objectobj.drop_duplicates(keeplast)
1 cow
3 beetle
4 lama
5 hippo
Name: animal, dtype: objectobj.drop_duplicates(keepFalse)
1 cow
3 beetle
5 hippo
Name: animal, dtype: object如果设置 inplaceTrue则不会返回任何值但原对象的值已被改变 import pandas as pdobj1 pd.Series([lama, cow, lama, beetle, lama, hippo], nameanimal)obj1
0 lama
1 cow
2 lama
3 beetle
4 lama
5 hippo
Name: animal, dtype: objectobj2 obj1.drop_duplicates()obj2 # 有返回值
0 lama
1 cow
3 beetle
5 hippo
Name: animal, dtype: objectobj3 obj1.drop_duplicates(inplaceTrue)obj3 # 无返回值obj1 # 原对象的值已改变
0 lama
1 cow
3 beetle
5 hippo
Name: animal, dtype: object在 DataFrame 对象中的使用 import numpy as npimport pandas as pdobj pd.DataFrame({data1 : [a] * 4 [b] * 4,data2 : np.random.randint(0, 4, 8)})objdata1 data2
0 a 2
1 a 1
2 a 1
3 a 2
4 b 1
5 b 2
6 b 0
7 b 0obj.drop_duplicates()data1 data2
0 a 2
1 a 1
4 b 1
5 b 2
6 b 0obj.drop_duplicates(subsetdata2)data1 data2
0 a 2
1 a 1
6 b 0obj.drop_duplicates(subsetdata2, ignore_indexTrue)data1 data2
0 a 2
1 a 1
2 b 0【03x00】数据替换
【03x01】replace
replace 方法可以根据值的内容进行替换。
基本语法 Series.replace(self, to_replaceNone, valueNone, inplaceFalse, limitNone, regexFalse, methodpad) DataFrame.replace(self, to_replaceNone, valueNone, inplaceFalse, limitNone, regexFalse, methodpad)
官方文档 https://pandas.pydata.org/docs/reference/api/pandas.Series.replace.html https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.replace.html
常用参数
参数描述to_replace找到要替换值的方法可以是字符串、正则表达式、列表、字典、整数、浮点数、Series 对象或者 None使用不同参数的区别参见官方文档value用于替换匹配项的值 对于 DataFrame可以使用字典的值来指定每列要使用的值还允许使用此类对象的正则表达式字符串和列表或字典inplacebool 类型是否直接改变原数据且不返回值默认 Falseregexbool 类型或者与 to_replace 相同的类型当 to_replace 参数为正则表达式时regex 应为 True或者直接使用该参数代替 to_replace
to_replace 和 value 参数只传入一个值单个值替换单个值 import pandas as pdobj pd.Series([0, 1, 2, 3, 4])obj
0 0
1 1
2 2
3 3
4 4
dtype: int64obj.replace(0, 5)
0 5
1 1
2 2
3 3
4 4
dtype: int64to_replace 传入多个值value 传入一个值多个值替换一个值 import pandas as pdobj pd.Series([0, 1, 2, 3, 4])obj
0 0
1 1
2 2
3 3
4 4
dtype: int64obj.replace([0, 1, 2, 3], 4)
0 4
1 4
2 4
3 4
4 4
dtype: int64to_replace 和 value 参数都传入多个值多个值替换多个值 import pandas as pdobj pd.Series([0, 1, 2, 3, 4])obj
0 0
1 1
2 2
3 3
4 4
dtype: int64obj.replace([0, 1, 2, 3], [4, 3, 2, 1])
0 4
1 3
2 2
3 1
4 4
dtype: int64to_replace 传入字典 import pandas as pdobj pd.DataFrame({A: [0, 1, 2, 3, 4],B: [5, 6, 7, 8, 9],C: [a, b, c, d, e]})objA B C
0 0 5 a
1 1 6 b
2 2 7 c
3 3 8 d
4 4 9 eobj.replace(0, 5)A B C
0 5 5 a
1 1 6 b
2 2 7 c
3 3 8 d
4 4 9 eobj.replace({0: 10, 1: 100})A B C
0 10 5 a
1 100 6 b
2 2 7 c
3 3 8 d
4 4 9 eobj.replace({A: 0, B: 5}, 100)A B C
0 100 100 a
1 1 6 b
2 2 7 c
3 3 8 d
4 4 9 eobj.replace({A: {0: 100, 4: 400}})A B C
0 100 5 a
1 1 6 b
2 2 7 c
3 3 8 d
4 400 9 eto_replace 传入正则表达式 import pandas as pdobj pd.DataFrame({A: [bat, foo, bait],B: [abc, bar, xyz]})objA B
0 bat abc
1 foo bar
2 bait xyzobj.replace(to_replacer^ba.$, valuenew, regexTrue)A B
0 new abc
1 foo new
2 bait xyzobj.replace({A: r^ba.$}, {A: new}, regexTrue)A B
0 new abc
1 foo bar
2 bait xyzobj.replace(regexr^ba.$, valuenew)A B
0 new abc
1 foo new
2 bait xyzobj.replace(regex{r^ba.$: new, foo: xyz})A B
0 new abc
1 xyz new
2 bait xyzobj.replace(regex[r^ba.$, foo], valuenew)A B
0 new abc
1 new new
2 bait xyz【03x02】where
where 方法用于替换条件为 False 的值。
基本语法 Series.where(self, cond, othernan, inplaceFalse, axisNone, levelNone, errorsraise, try_castFalse) DataFrame.where(self, cond, othernan, inplaceFalse, axisNone, levelNone, errorsraise, try_castFalse)
官方文档 https://pandas.pydata.org/docs/reference/api/pandas.Series.where.html https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.where.html
常用参数
参数描述cond替换条件如果 cond 为 True则保留原始值。如果为 False则替换为来自 other 的相应值other替换值如果 cond 为 False则替换为来自该参数的相应值inplacebool 类型是否直接改变原数据且不返回值默认 False
在 Series 中的应用 import pandas as pdobj pd.Series(range(5))obj
0 0
1 1
2 2
3 3
4 4
dtype: int64obj.where(obj 0)
0 NaN
1 1.0
2 2.0
3 3.0
4 4.0
dtype: float64obj.where(obj 1, 10)
0 10
1 10
2 2
3 3
4 4
dtype: int64在 DataFrame 中的应用 import pandas as pdobj pd.DataFrame(np.arange(10).reshape(-1, 2), columns[A, B])objA B
0 0 1
1 2 3
2 4 5
3 6 7
4 8 9m obj % 3 0obj.where(m, -obj)A B
0 0 -1
1 -2 3
2 -4 -5
3 6 -7
4 -8 9obj.where(m, -obj) np.where(m, obj, -obj)A B
0 True True
1 True True
2 True True
3 True True
4 True True【03x03】mask
mask 方法与 where 方法相反mask 用于替换条件为 False 的值。
基本语法 Series.mask(self, cond, othernan, inplaceFalse, axisNone, levelNone, errorsraise, try_castFalse) DataFrame.mask(self, cond, othernan, inplaceFalse, axisNone, levelNone, errorsraise, try_castFalse)
官方文档 https://pandas.pydata.org/docs/reference/api/pandas.Series.mask.html https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.mask.html
常用参数
参数描述cond替换条件如果 cond 为 False则保留原始值。如果为 True则替换为来自 other 的相应值other替换值如果 cond 为 False则替换为来自该参数的相应值inplacebool 类型是否直接改变原数据且不返回值默认 False
在 Series 中的应用 import pandas as pdobj pd.Series(range(5))obj
0 0
1 1
2 2
3 3
4 4
dtype: int64obj.mask(obj 0)
0 0.0
1 NaN
2 NaN
3 NaN
4 NaN
dtype: float64obj.mask(obj 1, 10)
0 0
1 1
2 10
3 10
4 10
dtype: int64在 DataFrame 中的应用 import pandas as pdobj pd.DataFrame(np.arange(10).reshape(-1, 2), columns[A, B])objA B
0 0 1
1 2 3
2 4 5
3 6 7
4 8 9m obj % 3 0obj.mask(m, -obj)A B
0 0 1
1 2 -3
2 4 5
3 -6 7
4 8 -9obj.where(m, -obj) obj.mask(~m, -obj)A B
0 True True
1 True True
2 True True
3 True True
4 True True这里是一段防爬虫文本请读者忽略。
本文原创首发于 CSDN作者 TRHX。
博客首页https://itrhx.blog.csdn.net/
本文链接https://itrhx.blog.csdn.net/article/details/106900748
未经授权禁止转载恶意转载后果自负尊重原创远离剽窃