1.if-then / if-then-else用在一个数据帧上:
(原文链接:https://blog.csdn.net/tcy23456/article/details/85460709)
(可进入该博主的主页,查看更多pandas其他功能资料)
# 实例1:if-then-else
df = pd.DataFrame({'A': [10,11,12],'B': [20,21,22],'C': [30, 31, -32]})
df.loc[df.A >= 11, 'B'] = -1 #if-then在一列上(对一列进行修改值
df.loc[df.A >= 5, ['B', 'C']] = 88 #if-then分配给2列
df.loc[df.A < 12, ['B', 'C']] = 99 # 添加不同逻辑另一行,以执行-else
#df result1 result2 result3
A B C A B C A B C A B C
0 10 20 30 0 10 20 30 0 10 88 88 0 10 99 99
1 11 21 31 1 11 -1 31 1 11 88 88 1 11 99 99
2 12 22 -32 2 12 -1 -32 2 12 88 88 2 12 88 88
# 实例2:where 矢量化if else
df_bool = pd.DataFrame({'A': [True] * 3, 'B': [False] * 3, 'C': [True, False,True] })
df.where(df_bool, -66)#根据bool值选择
df['logic'] = np.where(df['A'] > 11, 'high', 'low')
#df result4 result5
A B C A B C A B C logic
0 10 99 99 0 10 -66 99 0 10 99 99 low
1 11 99 99 1 11 -66 -66 1 11 99 99 low
2 12 88 88 2 12 -66 88 2 12 88 88 high
# 实例3:
s1=pd.Series([11,np.nan,13,14,np.nan])
s2=pd.Series([np.nan,22,23,24,25])
np.where(pd.isnull(s1),s2,s1)#array([11., 22., 13., 14., 25.])
df1=pd.DataFrame({'a':[11,np.nan,13,14,np.nan],'b':[np.nan,22,23,24,25]})
df2=pd.DataFrame({'a':[np.nan,42,43,np.nan,45],'b':[31,np.nan,33,34,35]})
pd.DataFrame(np.where(pd.isnull(df1),df2,df1),columns=list('ab'))
# df1 df2 result
a b a b a b
0 11.0 NaN 0 NaN 31.0 0 11.0 31.0
1 NaN 22.0 1 42.0 NaN 1 42.0 22.0
2 13.0 23.0 2 43.0 33.0 2 13.0 23.0
3 14.0 24.0 3 NaN 34.0 3 14.0 24.0
4 NaN 25.0 4 45.0 35.0 4 45.0 25.0
============================================================
2.if-then / if-then-else用在2个数据帧上:
实例1:# 若df1>=df2选择df1中数据,否则选择df2中的数据
df1 = pd.DataFrame({'A': [10, 11], 'B': [12, 13]})
df2 = pd.DataFrame({'A': [21, -22], 'B': [23, -24]})
result1=df1[df1>=df2].append(df2[df1<df2]).dropna()
result2=df1[df1.A>df2.B]
result3=df1[df1.A!=11]
# df1 df2 result1 result2 result3
A B A B A B A B A B
0 10 12 0 21 23 0 21 23 1 11 13 0 10 12
1 11 13 1 -22 -24 1 11 13
============================================================
二,pandas的替换和部分替换(replace)
原文链接:https://www.jianshu.com/p/2557a805211f
在处理数据的时候,很多时候会遇到批量替换的情况,如果一个一个去修改效率过低,也容易出错。replace()是很好的方法。
1、替换全部或者某一行
replace的基本结构是:df.replace(to_replace, value) 前面是需要替换的值,后面是替换后的值。
例如我们要将南岸改为城区:
将南岸改为城区
这样Python就会搜索整个DataFrame并将文档中所有的南岸替换成了城区(要注意这样的操作并没有改变文档的源数据,要改变源数据需要使用inplace = True)。
使用inplace = True更改源数据
由于南岸只有城市一列具有相同值,使用起来比较方便。
但是如果我们要改变表1Lon里的某个数据,而不改变Longitude的数据要怎么做呢?
改变指定的列的数据
所以只想替换部分数据的时候并且要写入源数据就需要指定inplace。
在上面的操作只改变了表1Lon的数据,其它列的数据并没有被替换,而且在替换后的结果不需要我们再和源数据进行合并操作,可以直接体现在源数据中。
2、替换指定的某个或指定的多个数值(用字典的形式)
只改变指定的值
这个很好理解,就是字典里的建作为原值,字典里的值作为替换的新值。
当然,我们也可是使用列表的形式进行替换:df.replace([‘A’,‘29.54’],[‘B’,100])
用列表的形式进行替换
还有如果想要替换的新值是一样的话,我们还可以这样做:
替换的新值一样时
部分替换和替换某个值结合使用的话就可以替换单个列的数值:
替换单个列的数值
3、使用正则表达式替换
正则表达式很强大,能够让我们实现一次替换很多很多个不同的值:
正则表达式没有指定regex =True
正则表达式指定regex =True
使用正则表达式的时候记得后面加 regex=True参数。
有图中我们可以看到只要包含有大写的英文字母的数据都被替换了,如果我们要写入源数据还需要指定inpla = True。
指定列替换数据
当需要将缺失值替换掉的时候,我们可以考虑直接只用fillna(),功能更强大,这个前面已经有说过了。
在某些情况下,如果我们只需要某个数据的部分内容,我们该怎么操作呢?
比如要把变电站都改为transformer_substation,或者是把Latitude列的前面的ab改为AB:
指定列更改替换部分字符
指定列更改替换部分字符
需要注意的时更好指定列的时候,使用str.replace时不能使用inplace = True参数,因此需要改成赋值,赋值的时候不要忘了是列的赋值而不是整个表格的赋值。
以网页表格为例:https://www.kuaidaili.com/free/
该网站数据存在table标签,直接用requests,需要结合bs4解析正则/xpath/lxml等,没有几行代码是搞不定的。
今天介绍的黑科技是pandas自带爬虫功能,pd.read_html(),只需传人url,一行代码搞定。
原网页结构如下:
python代码如下:
import pandas as pd\nurl='http://www.kuaidaili.com/free/'
df=pd.read_html(url)[0]
# [0]:表示第一个table,多个table需要指定,如果不指定默认第一个
大家好,我是才哥。
在 Excel 中IF 函数是最常用的函数之一,它可以对值和期待值进行逻辑比较。 因此IF 语句可能有两个结果: 第一个结果是比较结果为 True,第二个结果是比较结果为 False。
例如,=IF(C2=”Yes”,1,2) 表示 IF(C2 = Yes, 则返回 1, 否则返回 2)。
那么,在Pandas里我们可以怎么来轻松搞定这一操作呢?
今天,我们就来了解一下!
文章目录1. 案例需求2. Excel轻松搞定3. Pandas处理4. 延伸
1. 案例需求
原始数据如下
============================================================
1.if-then / if-then-else用在一个数据帧上:
# 实例1:if-then-else
df = pd.DataFrame({'A': [10,11,12],'B': [20,21,22],'C'...
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入
欢迎使用Markdown编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
我会解释如何在pandas中根据条件赋值。虽然它不使用 if 语句,但它可以处理条件分支,如 if then … 或 if then … else …。具体值的替换见后面的文章,替换或删除缺失值NaN。以下面的 pandas.DataFrame 为例。以下内容进行说明。
一、pandas.apply()
1.1遍历DataFrame的元素(一行数据或者一列数据)
dataframe.apply(function,axis)对一行或一列做出一些操作(axis=1遍历行,axis=0遍历列)
1.1.1 行遍历
1.1.2 列遍历
默认列遍历
1.2遍历Series的元素(单个数据)
1.3 lambda表达式
函数式编程,使得apply()处理数据时,参数可...
现在有一个Python程序需要对数据表里数据进行处理,把大于0的值转换为1,小于或等于0的值为0。
打算用pandas 的df.apply()方法加lambda函数对整个数据表进行批量转换,但是在使用的时候发现程序报错:
df.apply(lambda x: 1 if x>0 else 0)
错误信息:
ValueError: (‘The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any()
你可以使用numpy.where:def my_fun (var1,var2,var3):df[var3]= np.where((df[var1]-df[var2])>0, df[var1]-df[var2], 0)return dfdf1 = my_fun('age1','age2','diff')print (df1)age1 age2 diff0 23 10 131 ...
一篇比较好的pandas指南,适合已经熟悉pandas,并想掌握一些进阶用法的读者,不适合对pandas完全不了解的新人。文章大部分是Stack Overflow常见问题集合。
pandas 官网 原文连接: https://pandas.pydata.org/pandas-docs/stable/user_guide/cookbook.html
我会在原文基础上进行增删改,添加一些注释。