前面内容:pandas(12 IO工具和稀松数据)
目录
一、Caveats警告 & Gotchas预见
1.1 在Pandas中使用if/Truth语句
1.2 位运算布尔
1.3 isin操作
1.4 重新索引reindex和 loc&iloc 使用注意事项
1.5 loc和iloc
二、Python Pandas 与SQL的比较
2.1 数据集
2.2 SELECT(查询)
2.3 WHERE(过滤)
2.4 GroupBy(分组)
2.5 前N行
一、Caveats警告 & Gotchas预见
1.1 在Pandas中使用if/Truth语句
Pandas遵循numpy的约定,当您尝试将某个对象转换为 bool 时,会抛出错误。这在使用布尔运算的 if 或 when 以及 or 、 and 或 not 时会发生。不清楚应该得到什么结果。它应该是True,因为它不是零长度的吗?它应该是False,因为有False的值吗?不清楚,所以Pandas会引发 ValueError –
例1:
import pandas as pdif pd.Series([False, True, False]):print('I am True')
运行结果:
例2:any()
import pandas as pdif pd.Series([False, True, False]).any():print("I am any")
运行结果:
例3:bool()单个元素
import pandas as pd
print(pd.Series([True]).bool())
运行结果:
例4:bool()多元素
import pandas as pd
print(pd.Series([True,False]).bool())
运行结果:
1.2 位运算布尔
位运算布尔运算符如 ==
和 !
返回一个布尔序列,这通常是所需的。
例5:
import pandas as pds = pd.Series(range(5))
print(s==4)
运行结果:
1.3 isin操作
此操作返回一个布尔系列,显示系列中的每个元素是否完全包含在传递的值序列中。
例6:isin()
import pandas as pds = pd.Series(list('abc'))
s = s.isin(['a', 'c', 'e'])
print(s)
运行结果:
1.4 重新索引reindex和 loc&iloc 使用注意事项
很多用户会发现使用 ix 索引能力 作为从 Pandas 对象中选择数据的简洁方式−
例7: loc()
import pandas as pd
import numpy as npdf = pd.DataFrame(np.random.randn(6, 4), columns=['one', 'two', 'three',
'four'],index=list('abcdef'))print(df)
print('-'*50)
print(df.loc[['b', 'c', 'e']])
运行结果:
例8: reindex()
import pandas as pd
import numpy as npdf = pd.DataFrame(np.random.randn(6, 4), columns=['one', 'two', 'three', 'four'], index=list('abcdef'))print(df)
print('-' * 50)
print(df.reindex(['b', 'c', 'e']))#只有一对[]如果和上面一样是两对,值则为空
运行结果:
例9:iloc()和reindex
import pandas as pd
import numpy as npdf = pd.DataFrame(np.random.randn(6, 4), columns=['one', 'two', 'three',
'four'],index=list('abcdef'))print(df.iloc[[1, 2, 4]])
print('-'*50)
print(df.reindex([1, 2, 4]))
运行结果:
结论:使用标签时,loc和reindex等价,使用行列位置时,iloc有数值,reindex数值为空
1.5 loc和iloc
1. loc
:基于标签进行索引
-
语法:
df.loc[row_indexer, column_indexer]
row_indexer
:行标签(可以是单个标签、标签列表、布尔数组等)。column_indexer
:列标签(可以是单个标签、标签列表、布尔数组等)。
-
特点:
loc
通过 行标签 和 列标签 来进行定位,常用于通过标签名来选取数据。- 选择的范围是 闭区间(包括结束标签)。
2. iloc
:基于位置进行索引
-
语法:
df.iloc[row_indexer, column_indexer]
row_indexer
:行的位置索引(可以是整数、整数列表、切片等)。column_indexer
:列的位置索引(可以是整数、整数列表、切片等)。
-
特点:
iloc
通过 行的位置索引 和 列的位置索引 来进行定位,常用于通过整数位置进行选取数据。- 选择的范围是 半开区间(不包括结束位置)。
二、Python Pandas 与SQL的比较
由于许多潜在的Pandas用户对SQL有一定的了解,所以本页面旨在提供使用pandas执行各种SQL操作的一些示例。
2.1 数据集
例1:
import pandas as pdurl = 'https://raw.githubusercontent.com/mwaskom/seaborn-data/master/tips.csv'
tips = pd.read_csv(url)
print(tips.head())
运行结果:
2.2 SELECT(查询)
在SQL中,使用逗号分隔的列列表进行选择(或使用*选择所有列)-
例2:
SQL: SELECT
SELECT total_bill, tip, smoker, time
FROM tips
LIMIT 5;
pandas:
print(tips[['total_bill', 'tip', 'smoker', 'time']].head(5))
运行结果:
2.3 WHERE(过滤)
例3:
SQL: WHERE
SELECT * FROM tips WHERE time = 'Dinner' LIMIT 5;
pandas: 布尔值
tips[tips['time'] == 'Dinner'].head(5)
运行结果:
2.4 GroupBy(分组)
例4:
SQL:
SELECT sex, count(*)
FROM tips
GROUP BY sex;
pandas:
print(tips.groupby('sex').size())
运行结果:
2.5 前N行
例5:
SQL:LIMIT
SELECT * FROM tips
LIMIT 5 ;
pandas:
print(tips.head(5))
运行结果: