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")