1 定义生成dataframe
import pandas as pd
df = pd.DataFrame({'A':[1,2,3],
'B':[4,5,6],
'C':[3,8,9],
'D':[1,3,5],
'E':[5,3,6],
'F':[7,4,3]})
输出:
A B C D E F
0 1 4 3 1 5 7
1 2 5 8 3 3 4
2 3 6 9 5 6 3
2 根据列的值,取多行数据
df[df['A']==2]
或
df.loc[df['A']==2]
输出
A B C D E F
1 2 5 8 3 3 4
3 筛选某一列为某些取值的行数据
df[df['A'].isin(['1', '3'])]
输出
A B C D E F
0 1 4 3 1 5 7
2 3 6 9 5 6 3
4 对nan值进行填充0
空值:在pandas中的空值是""
缺失值:在dataframe中为nan或者naT(缺失时间),在series中为none或者nan即可
生成dataframe
import numpy as np
df = pd.DataFrame({'A':[1,2,3],
'B':[4,5,6],
'C':[np.nan,8,9],
'D':[1,3,5],
'E':[5,3,6],
'F':[7,4,3]})
print (df)
# 输出:
A B C D E F
0 1 4 NaN 1 5 7
1 2 5 8.0 3 3 4
2 3 6 9.0 5 6 3
找到存在空值nan的行
print(df[df.isnull().T.any()])
# 输出
A B C D E F
0 1 4 NaN 1 5 7
其中,isnull()能够判断数据中元素是否为空值;T为转置;any()判断该行是否有空值
用0填充空值
print(df.fillna(value=0))
# 输出:
A B C D E F
0 1 4 0.0 1 5 7
1 2 5 8.0 3 3 4
2 3 6 9.0 5 6 3
5 其他一些函数具体解释
来自博客:
df.dropna()
df.fillna()
df.isnull()
df.isna()
DataFrame.dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)
函数作用:删除含有空值的行或列
axis:维度,axis=0表示index行,axis=1表示columns列,默认为0
how:"all"表示这一行或列中的元素全部缺失(为nan)才删除这一行或列,"any"表示这一行或列中只要有元素缺失,就删除这一行或列
thresh:一行或一列中至少出现了thresh个才删除。
subset:在某些列的子集中选择出现了缺失值的列删除,不在子集中的含有缺失值得列或行不会删除(有axis决定是行还是列)
inplace:刷选过缺失值得新数据是存为副本还是直接在原数据上进行修改。
6 筛选操作
6.1 定义dataframe
import pandas as pd
import numpy as np
dict_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
'Kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
'Year':[2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(dict_data)
df
输出结果:
Points Rank Team Year
0 876 1 Riders 2014
1 789 2 Riders 2015
2 863 2 Devils 2014
3 673 3 Devils 2015
4 741 3 Kings 2014
5 812 4 Kings 2015
6 756 1 Kings 2016
7 788 1 Kings 2017
8 694 2 Riders 2016
9 701 4 Royals 2014
10 804 1 Royals 2015
11 690 2 Riders 2017
6.2 根据多列去重,按Rank和Team去重
df_drop = df.drop_duplicates(subset=['Rank','Team']) # 默认keep=‘first’
df_drop
输出:
Points Rank Team Year
0 876 1 Riders 2014
1 789 2 Riders 2015
2 863 2 Devils 2014
3 673 3 Devils 2015
4 741 3 Kings 2014
5 812 4 Kings 2015
6 756 1 Kings 2016
9 701 4 Royals 2014
10 804 1 Royals 2015
6.3 根据Team分组,找出大于等于3的数据
df_drop_group = df_drop.groupby('Team').filter(lambda x: len(x) >= 3)
df_drop_group
输出:
Points Rank Team Year
4 741 3 Kings 2014
5 812 4 Kings 2015
6 756 1 Kings 2016
6.4 按一列去重,按Team去重
df_drop_group_keep = df_drop_group.drop_duplicates(subset=['Team'],keep='last')
df_drop_group_keep
输出:
Points Rank Team Year
6 756 1 Kings 2016
参数解释:
subset: 列名,默认所有的列
keep: 是否保留{‘first’, ‘last’, False},keep= ‘first’ 表示去重时每组重复数据保留第一条数据,其余数据丢弃; keep=‘last’ 表示去重时每组重复数据保留最后一条数据,其余数据丢弃;keep=False 表示去重时每组重复数据全部丢弃,不保留
inplace: 是否替换{False, True},inplace=False表示去重之后不覆盖原表格数据,inplace=True表示去重之后原表格数据被覆盖
6.5 删除指定的某些数据值
在最原来的df这个dataframe中,删除和df_drop_group_keep这个dataframe中相同的Team和Rank值的数据
df = df[~(df['Team'].isin(df_drop_group_keep['Team']) & df['Rank'].isin(df_drop_group_keep['Rank']))]
df
输出:
Points Rank Team Year
0 876 1 Riders 2014
1 789 2 Riders 2015
2 863 2 Devils 2014
3 673 3 Devils 2015
4 741 3 Kings 2014
5 812 4 Kings 2015
8 694 2 Riders 2016
9 701 4 Royals 2014
10 804 1 Royals 2015
11 690 2 Riders 2017
7 dataframe写csv文件
df.to_csv('out.zip', index=False)
8 dataframe读取csv文件或excel文件
df = pd.read_csv("file.csv", encoding="utf-8")
df = pd.read_excel("file.xlsx", encoding="utf-8")