如果对于较大的数据,一次输出全部行列,看起来很乱,所以需要使用一些方法查看部门数据
数据:
hero.csv
加载方法:
Python
1
2
importpandasaspd
df=pd.read_csv(‘hero.csv’,encoding=’gbk’)
查看数据:
由于行数较多想查看前5行,可以使用
df.head() 或 df[0:5]
前10行,该参数可自行设置:
df.head(10)
最后5行
df.tail()
最后10行,该参数可自行设置:
df.tail(10)
查看某一列数据:
df[‘品质’] 或者 df.品质
查看某一列前5行数据:
df[‘品质’].head()
其他行数或者最后几行方法类似
查看多列数据:
df[[‘品质’,’初始血量’]]
查看前10行多列数据:
df.loc[0:10,[‘品质’,’英雄名字’]]
查看行列区间数据:
df.iloc[3:5,0:2]
loc和iloc有什么区别呢?
loc是根据索引的名字来取数据的,iloc是根据行数来取数据的,只不过我们之前的例子行索引刚好也是数字,所以会出现这种问题
可以看这个例子:
Python
1
2
3
4
5
6
7
importpandasaspd
importnumpyasnp
a=np.zeros((4,3))
df=pd.DataFrame(a,index=list(‘abcd’),columns=list(‘ABC’))
print(df.loc[0]) #这个报错
print(df.loc[‘a’])
print(df.iloc[0])
还有一个需要注意的地方df.iloc[0]和df.iloc[[0]]的区别:
第一个返回的是Series,第二个返回的是DataFrame
Python
1
2
3
4
5
6
7
8
9
10
11
12
importpandasaspd
importnumpyasnp
a=np.zeros((4,3))
df=pd.DataFrame(a,index=list(‘abcd’),columns=list(‘ABC’))
print(df.loc[‘a’])
print(df.loc[[‘a’]])
print(df.iloc[0])
print(df.iloc[[0]])
print(type(df.loc[‘a’]))
print(type(df.loc[[‘a’]]))
print(type(df.iloc[0]))
print(type(df.iloc[[0]]))
结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
A0.0
B0.0
C0.0
Name:a,dtype:float64
ABC
a0.00.00.0
A0.0
B0.0
C0.0
Name:a,dtype:float64
ABC
a0.00.00.0
查看列名:
df.columns
查看索引:
df.index
查看行列数:
df.shape
查看列数据类型:
df.dtypes
查看空值
df.isnull()
查看前5行空值:
df.isnull().head()
其他行数或者最后几行方法类似
查看表信息:
df.info()
查看某一类型唯一值:
df[‘品质’].unique()
查看某一类型各值出现频次
df[‘品质’].value_counts()
数据处理
去掉有空值的行:
df = df.dropna()
去掉全是空值的行:
df = df.dropna(how=’all’)
填充空值为0:
df = df.fillna(value=0)
根据空值之前的值填充数据
df = df.fillna(method=’ffill’)
根据空值之后的值填充数据:
df = df.fillna(method=’bfill’)
数据类型转换:
Python
1
2
3
4
5
6
7
importpandasaspd
dic={‘a’:{‘A’:1,’B’:2},’b’:{‘A’:3,’B’:4},’c’:{‘A’:5,’B’:6}}
df=pd.DataFrame(dic)
print(df.dtypes)
df[‘a’]=df[‘a’].astype(‘str’)
df[‘b’]=df[‘b’].astype(‘float’)
print(df.dtypes)
结果:
1
2
3
4
5
6
7
8
aint64
bint64
cint64
dtype:object
aobject
bfloat64
cint64
dtype:object
大小写转换:
Python
1
2
3
4
5
6
7
8
importpandasaspd
dic={‘a’:{‘A’:’Tom’,’B’:’Jack’},’b’:{‘A’:3,’B’:4},’c’:{‘A’:5,’B’:6}}
df=pd.DataFrame(dic)
print(df.a)
df[‘a’]=df[‘a’].str.upper()#大写
print(df.a)
df[‘a’]=df[‘a’].str.lower()#小写
print(df.a)
结果:
1
2
3
4
5
6
7
8
9
ATom
BJack
Name:a,dtype:object
ATOM
BJACK
Name:a,dtype:object
Atom
Bjack
Name:a,dtype:object
如果修改首字母大写,可以使用title()
修改列名:
Python
1
2
3
4
5
6
7
importpandasaspd
importnumpyasnp
a=np.arange(12).reshape((3,4))
df=pd.DataFrame(a)
print(df.columns)
df.columns=list(‘abcd’)
print(df.columns)
结果:
1
2
RangeIndex(start=0,stop=4,step=1)
Index([‘a’,’b’,’c’,’d’],dtype=’object’)
条件筛选:
使用loc筛选:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
importpandasaspd
dic1={‘name’:[‘tom’,’jack’,’lucy’,’kate’,’bob’],
‘total’:[280,270,270,260,240],
‘math’:[100,90,95,90,80],
‘chinese’:[80,90,85,80,80],
‘english’:[100,90,90,90,80],}
df1=pd.DataFrame(dic1,columns=[‘name’,’total’,’math’,’chinese’,’english’])
选择total大于等于270的数据
df_t=df1.loc[df1[‘total’]>=270,[‘name’,’total’,’math’,’chinese’,’english’]]
print(df_t)
选择math,chinese,english都大于等于90的数据
df_t=df1.loc[(df1[‘math’]>=90)&(df1[‘chinese’]>=90)&(df1[‘english’]>=90),[‘name’,’total’,’math’,’chinese’,’english’]]
print(df_t)
结果:
1
2
3
4
5
6
nametotalmathchineseenglish
0tom28010080100
1jack270909090
2lucy270958590
nametotalmathchineseenglish
1jack270909090
使用query筛选:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
importpandasaspd
dic1={‘name’:[‘tom’,’jack’,’lucy’,’kate’,’bob’],
‘total’:[280,270,270,260,240],
‘math’:[100,90,95,90,80],
‘chinese’:[80,90,85,80,80],
‘english’:[100,90,90,90,80],}
df1=pd.DataFrame(dic1,columns=[‘name’,’total’,’math’,’chinese’,’english’])
选择total大于等于270的数据
df_t=df1.query(‘total>=270’)[[‘name’,’total’,’math’,’chinese’,’english’]]
print(df_t)
选择math,chinese,english都大于等于90的数据
df_t=df1.query(‘math>=90 & chinese>=90 & english>=90’)[[‘name’,’total’,’math’,’chinese’,’english’]]
print(df_t)
结果:
1
2
3
4
5
6
nametotalmathchineseenglish
0tom28010080100
1jack270909090
2lucy270958590
nametotalmathchineseenglish
1jack270909090
这2个功能基本一样,相对来说第一个更好,第一个判断的数据直接在使用前用变量声明,然后随时修改变量值即可,而不是在函数中逐个修改
Original: https://blog.csdn.net/weixin_29147347/article/details/113974286
Author: 日本狸猫田中裕之
Title: python处理dataframe数据_pandas入门-3 DataFrame数据查看和处理
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/678167/
转载文章受原作者版权保护。转载请注明原作者出处!