前言
本文记录pandas常用代码段,方便使用时直接查找。
一、表格创建
import pandas as pd
import numpy as np
# 空表格
df = pd.DataFrame()
# 字典的方式创建 (key+列表)
df1 = pd.DataFrame({'yes': [0, 2], 'no': [1, 3]})
df2 = pd.DataFrame({'yes': np.arange(2), 'no': np.arange(3, 5)})
# 自定义行号,添加index参数即可
df3 = pd.DataFrame({'Jerry': ['tall', 'smart'], 'Sue': ['cue', 'rich']}, index=['A', 'B'])
Series可以看成是DataFrame的一列
s1 = pd.Series([1, 2, 3, 4, 5])
"""
0 1
1 2
2 3
3 4
4 5
dtype: int64
"""
Series和DataFrame是密切相关的。将DataFrame看作实际上只是一堆“粘合在一起”的Series即可。
二、读取文件
CSV:Comma-Separated Values,是一个用逗号分隔的表格。
链接: 以下代码数据获取链接
wine_reviews = pd.read_csv(r".\test06\wine-reviews\winemag-data-130k-v2.csv")
# shape属性查看几行几列
print(wine_reviews.shape)
# 查看前n行
n=10
print(wine_reviews.head(n))
# index_col=0:设定第一列为index值
wine_reviews = pd.read_csv(r".\test06\wine-reviews\winemag-data-130k-v2.csv", index=0)
三、索引
1、获取一列
# 可以用.列名的方式获取该列数值 ,是一个Series,也可以使用[]操作,
print(wine_reviews.country)
print(wine_reviews['country']) # 该方法可以处理带空格的字段,将pandas看成更高级的字典,每一列都是一个字典
2、iloc和loc
iloc是基于行号和列号的索引。loc和iloc都是行第一,列第二。iloc将表格看成一个大矩阵(类似numpy中的array),从中选取数据。
wine_reviews.iloc[0] # 选取第0行
wine_reviews.iloc[:, 0] # 选取第0列的所有值 :操作表示选取所有值
wine_reviews.iloc[[0, 1, 2], 0] # 选取0,1,2行的所有值
wine_reviews.iloc[-5:] # 选取倒数5行
wine_reviews.iloc[[0, 1, 2, 3], [1, 2]]
loc是基于标签的索引。对于要获取指定列名的数据样本使用loc较好,第一个是行索引,第二个是列名,类似series,故可以用条件索引。
wine_reviews.loc[0, 'country'] # country列第0个数据
wine_reviews.loc[:, ['taster_name', 'taster_twitter_handle']] # taster_name、taster_twitter_handle列的所有值
3、改变行索引
wine_reviews.set_index("title", inplace=True)
4、条件选择
print(wine_reviews[wine_reviews.country == 'Italy'])
print(wine_reviews.loc[wine_reviews.country == 'Italy'])
print(wine_reviews.loc[(wine_reviews.country == 'Italy') & (wine_reviews.points >= 90)])
wine_reviews.loc[reviews.country.isin(['Italy', 'France'])]
wine_reviews.loc[reviews.price.notnull()]
5、赋值
wine_reviews['critic'] = 'everyone' # 新增一列,所有值均为everyone
wine_reviews['index_backwards'] = range(len(reviews), 0, -1)
四、缺失值处理相关
链接: 数据集下载链接
import pandas as pd
if __name__ == '__main__':
nfl_data = pd.read_csv('./NFL Play by Play 2009-2017 (v4).csv')
pd.set_option('display.max_rows', 5)
print(nfl_data.head())
1、统计每一column的缺失值总数及缺失值占总数的百分比
missing_values_count = nfl_data.isnull().sum()
# how many total missing values do we have?
total_cells = np.product(nfl_data.shape)
total_missing = missing_values_count.sum()
# percent of data that is missing
percent_missing = (total_missing / total_cells) * 100
print(percent_missing)
思考:这个值丢失是因为没有记录还是因为它原本不存在?
如果原本就不存在,那么尝试猜测它是什么就没什么意义了。对于原本存在而未记录的,应该试着猜测它们应该是什么,而不是把它们作为NA。
2、dropna()删除有缺失值的行
nfl_data.dropna() # 删除所有缺失值的行
columns_with_na_dropped = nfl_data.dropna(axis=1) # 删除有缺失值的列
print(columns_with_na_dropped.head())
3、fillna() 将NaN值替换成指定值
# replace all NA's with 0
subset_nfl_data.fillna(0)
subset_nfl_data.fillna(method='bfill', axis=0).fillna(0) # 用同一列中紧随其后的任何值替换缺失的值,其余的用0填充
其他
1、idxmax()获取Series最大值所在的列
missing_values_count = nfl_data.isnull().sum()
print(missing_values_count.idxmax())
总结
总结常用的pandas操作,方便查找使用。