现在总结一下,之前使用过的pandas常用方法,或者小技巧。
(1)根据条件,选取多行数据:
看一个例子:
# @Time :2018/10/27
# @Author :LiuYinxing
import pandas as pd
def demo():
df = pd.DataFrame({'name':['tom', 'jok', 'cat', 'car'], 'score': [98, 66, 78, 100]}) # 创建一个DataFrame
# 获取 name = tom, cat 的信息
getdata = df[df['name'].isin(['tom', 'cat'])]
print(getdata)
# 获取 66 < score < 100 的信息
getdata = df[(df['score'] > 66) & (df['score'] < 100)]
print(getdata)
# 获取 score == 66 or score == 100 的信息
getdata = df[(df['score'] == 66) | (df['score'] == 100)]
print(getdata)
if __name__ == '__main__':
demo()
注意:pandas
按条件获取多行数据时,一般要用数学逻辑符号,例如:&
、|
。逻辑符号不能用 and
、 not
等。
(2)删除操作:
看例子:
# @Time :2018/10/27
# @Author :LiuYinxing
import pandas as pd
def demo():
df = pd.DataFrame({'name':['tom', 'jok', 'cat', 'car'], 'score': [98, 66, 78, 100]}) # 创建一个DataFrame
print(df)
# 删除列 -- pop 修改发生在原始的对象上。
df.pop('name')
print(df)
# 删除行 -- drop 原始对象不变,返回删除后的对象。
df = df.drop(0)
print(df)
if __name__ == '__main__':
demo()
注意:pandas
在列删中pop()
是在原实例上的操作,而行删除drop()
,则是返回删除之后的结果,不修改之前的实例,此外还有一点是,如果 index
有重复的,则会删除多行。
(3)合并、关联操作:
pandas 提供的 pd.merge()
函数,可以实现类似于SQL中的join操作。
merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=False,
suffixes=('_x', '_y'), copy=True, indicator=False,
validate=None)
主要参数解析:
参数 | 含义 | 备注 |
---|---|---|
left 、right |
要合并的两个DataFrame对象 | |
on |
按某一列连接 | 两个pd要存在相同的列名,可以是多列 |
left_on 、right_on |
用那一列作为键 | 可以是列名 |
left_index 、right_index |
使用哪个pd的索引作为键 | |
how |
连接方式 left , right ,outer (类似于并集),inner (类似于交集) |
与SQL中join操作的连接一样 |
sort |
对结果进行字典排序 | 有时可提高性能 |
python例子:
# @Time :2018/10/28
# @Author :LiuYinxing
import pandas as pd
def demo():
df1 = pd.DataFrame({'name': ['tom', 'jok', 'cat', 'car'], 'score1': [98, 66, 78, 100]}) # 创建一个DataFrame对象
df2 = pd.DataFrame({'name': ['tom', 'jok', 'cat'], 'score2': [98, 66, 78]}) # 创建一个DataFrame对象
rs = pd.merge(df1, df2, on='name', how='left')
rs = rs.fillna(0) # 缺失值 补全
print(rs)
if __name__ == '__main__':
demo()
(4)缺失数据处理:
还是看例子吧:
# @Time :2018/10/28
# @Author :LiuYinxing
import pandas as pd
def demo():
df = pd.DataFrame({'name': ['tom', 'jok', 'cat', 'car'], 'score': [98, None, 78, None]}) # 创建一个DataFrame对象
# 缺失值 填充
rs = df.fillna(0) # 缺失值 填充为 0
print(rs)
rs = df.fillna(method='pad') # 缺失值 填充向前看齐
print(rs)
rs = df.fillna(method='bfill') # 缺失值 填充向后看齐
print(rs)
# 缺失值 查询
print(df['score'].isnull())
print(df['score'].notnull())
# 删除缺失值
# dropna函数,其中axis参数默认axis = 0行上操作(删除正行,1 则删除整列)
rs = df.dropna(axis=0) # 缺失值 行删除
print(rs)
rs = df.dropna(axis=1) # 缺失值 列删除
print(rs)
if __name__ == '__main__':
demo()
注意:上面这些操作,不在原始的实例上处理,则是返回删除之后的结果。
(5)列类型转换:
astype
强制转换,适合多列。
df[['A', 'B']] = df[['A', 'B']].astype(float)
(6)获取行数和列数:
row_count = len(df.index) # 行数
loc_count = len(df) # 列数
声明: 总结学习,有问题或不妥之处,可以批评指正哦。