python处理dataframe数据_pandas入门-3 DataFrame数据查看和处理

python处理dataframe数据_pandas入门-3 DataFrame数据查看和处理

如果对于较大的数据,一次输出全部行列,看起来很乱,所以需要使用一些方法查看部门数据

数据:

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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球